-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSocketServer.ts
40 lines (31 loc) · 1.02 KB
/
SocketServer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { IncomingMessage } from 'http';
import WebSocket, { Server, ServerOptions } from 'ws';
const sockets: WebSocket[] = [];
/**
* @see https://github.com/websockets/ws/issues/1334
*/
export function createSocketServer(
options: ServerOptions,
onConnection?: (
this: Server,
socket: WebSocket,
request: IncomingMessage
) => any
) {
const server = new Server(options);
server.on('connection', (socket, request) => {
sockets.push(socket);
socket.on('close', () => sockets.splice(sockets.indexOf(socket), 1));
console.log(`[WebSocket] ${sockets.length} connections`);
onConnection?.call(server, socket, request);
});
server.on('error', console.error);
return server;
}
export async function sendSocket(data: any) {
if (!sockets[0]) console.warn('No socket connected');
for (const socket of sockets)
await new Promise<void>((resolve, reject) =>
socket.send(data, error => (error ? reject(error) : resolve()))
);
}