aboutsummaryrefslogtreecommitdiff
path: root/server/index.js
blob: 66f47aeefb934ac22c0ed4dd9417ae662690dd71 (plain)
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`);
    });
});