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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
import { Server } from "socket.io";
import { port } from "./config.js";
import * as events from "./events.js";
const server = new Server(port);
console.debug(`Listening on port ${port}`);
const rooms = {};
server.on(events.types.CONNECTION, (socket) => {
const me = socket.id;
console.debug(`[CONNECT] New client connected with ID ${me}`);
socket.on(events.types.JOIN, async ({ room }) => {
socket.join(room);
if (!rooms[room]) {
rooms[room] = [];
}
rooms[room].push(socket.id);
const sockets = await server.in(room).fetchSockets();
sockets.forEach((peer) => {
if (peer.id !== me) {
events.addPeer(me, false)(peer);
events.addPeer(peer.id, true)(socket);
}
});
});
socket.on(events.types.DISCONNECTING, () => {
for (const room in rooms) {
if (rooms[room].includes(me)) {
rooms[room] = rooms[room].filter((id) => id !== me);
events.removePeer(me)(socket.to(room));
if (rooms[room].length === 0) {
delete rooms[room];
}
}
}
});
socket.on(events.types.RELAY_ICE_CANDIDATE, async ({ candidate, peerId }) => {
events.ICECandidateReceived(me, candidate)(socket.to(peerId));
});
socket.on(events.types.RELAY_OFFER, async ({ offer, peerId }) => {
events.offerReceived(me, offer)(socket.to(peerId));
});
socket.on(events.types.RELAY_ANSWER, async ({ answer, peerId }) => {
events.answerReceived(me, answer)(socket.to(peerId));
});
});
|