/* Helpers for dealing with the `socket/` handlers, similar to the code in `client/api.js`. WebSockets already work well with JSON data, so this mostly handles create a single connection, and reconnecting when you need to. */ import { inject_remote } from "$/client/components/Source.svelte"; let raw_socket; /* Load the `/js/socket.io.min.js` file using `client/components/Sourse.svelte:inject_remote`. This makes it so if you don't use the socket.io stuff then you won't download the code. */ export const configure_socket = async () => { await inject_remote(document, "/js/socket.io.min.js"); } /* Connect to the server __once__. This should maintain the connection in the SPA for as long as possible and return only one. + `reconnection boolean` -- The reconnection policy that's passed to socket.io `io()`. */ export const connect_socket = (reconnection=false) => { if(raw_socket === undefined) { raw_socket = io({ reconnection }); } return raw_socket; } /* This is actually the way you should connect a socket in most pages. This will detect if a connection already exists, and if it does it simply disconnects, then reconnects. If there isn't a connection yet then it will call `connect_socket()` to establish the first one. */ export const reconnect_socket = () => { if(raw_socket !== undefined) { raw_socket.disconnect(); raw_socket.connect(); } else { connect_socket(); } return raw_socket; }