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
|
import { Server } from 'socket.io';
import { port } from './config.js';
import * as events from './events.js';
const server = new Server(port);
console.log(`Listening on port ${port}`);
const sockets = {};
server.on('connection', (socket) => {
sockets[socket.id] = socket;
const me = socket.id;
console.log(`[CONNECT] New client connected with ID ${me}`);
socket.on('join', (data) => {
socket.join(data.url);
const sockets = [...server.of(data.url).sockets.keys()];
sockets.forEach((peerId) => {
if (peerId !== me) {
const peer = server.sockets.sockets.get(peerId)
peer.emit(events.types.ADD_PEER, events.addPeer(me, false));
socket.emit(events.types.ADD_PEER, events.addPeer(peerId, true));
}
});
console.log(`[CONNECT] Client ${me} added to room ${data.url}`);
});
socket.on('disconnecting', () => {
const rooms = Object.keys(socket.rooms);
rooms.forEach(room => server.to(room).emit(events.types.REMOVE_PEER, events.removePeer(me)));
console.log(`[DISCONNECT] Client ${me} has disconnected and has been removed from all rooms`);
});
socket.on('relayICECandidate', (data) => {
const sockets = [...server.of(data.url).sockets.keys()];
sockets.forEach((peerId) => {
const peer = server.sockets.sockets.get(peerId)
peer.emit(events.types.ICE_CANDIDATE_RECEIVED, events.ICECandidateReceived(me, data.ice_candidate))
});
console.log(`[RELAY_ICE_CANDIDATE] ICE candidate for client ${me} has been relayed to all peers`);
});
socket.on('relaySessionDescription', (data) => {
const sockets = [...server.of(data.url).sockets.keys()];
sockets.forEach((peerId) => {
const peer = server.sockets.sockets.get(peerId)
peer.emit(events.types.SESSION_DESCRIPTION_RECEIVED, events.SessionDescriptionReceived(me, data.session_description))
});
console.log(`[RELAY_SESSION_DESCRIPTION] Session description for client ${me} has been relayed to all peers`);
});
});
|