diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-08-30 18:11:57 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-08-30 18:11:57 +0200 |
| commit | 284fc661dc7f18aa32d0dbcd8e7f98cb16af4bb7 (patch) | |
| tree | 2aa2fd491858fc572ff6b95806b69ec9a79b29c8 /server | |
| parent | 8c7fb565690890d57b6af20ad0771a48cf82b4c7 (diff) | |
Add new RTC code
Diffstat (limited to 'server')
| -rw-r--r-- | server/events.js | 36 | ||||
| -rw-r--r-- | server/index.js | 65 |
2 files changed, 64 insertions, 37 deletions
diff --git a/server/events.js b/server/events.js index 99e6b37..3ef21a9 100644 --- a/server/events.js +++ b/server/events.js @@ -1,27 +1,41 @@ export function addPeer(peerId, shouldCreateOffer) { - return { - peer_id: peerId, - should_create_offer: shouldCreateOffer, - } + return { + peerId, + shouldCreateOffer, + } } export function removePeer(peerId) { return { - peer_id: peerId, + peerId, } } export function SessionDescriptionReceived(peerId, sessionDescription) { return { - peer_id: peerId, - session_description: sessionDescription, + peerId, + sessionDescription, + } +} + +export function ICECandidateReceived(peerId, candidate) { + return { + peerId, + candidate + } +} + +export function offerReceived(peerId, offer) { + return { + peerId, + offer } } -export function ICECandidateReceived(peerId, ICECandidate) { +export function answerReceived(peerId, answer) { return { - peer_id: peerId, - ice_candidate: ICECandidate, + peerId, + answer } } @@ -30,6 +44,8 @@ export const types = { REMOVE_PEER: 'removePeer', RELAY_SESSION_DESCRIPTION: 'relaySessionDescription', RELAY_ICE_CANDIDATE: 'relayICECandidate', + OFFER_RECEIVED: 'offerReceived', + ANSWER_RECEIVED: 'answerReceived', ICE_CANDIDATE_RECEIVED: 'ICECandidateReceived', SESSION_DESCRIPTION_RECEIVED: 'SessionDescriptionReceived', }; diff --git a/server/index.js b/server/index.js index b5d5d1b..e6a37c7 100644 --- a/server/index.js +++ b/server/index.js @@ -5,51 +5,62 @@ import * as events from './events.js'; const server = new Server(port); console.log(`Listening on port ${port}`); -const sockets = {}; +const rooms = {}; server.on('connection', (socket) => { - sockets[socket.id] = socket; const me = socket.id; console.log(`[CONNECT] New client connected with ID ${me}`); socket.on('join', async (data) => { - socket.join(data.url); - const sockets = await server.in(data.url).fetchSockets() - console.log(sockets); - sockets.forEach((peer) => { - if (peer.id !== me) { - peer.emit(events.types.ADD_PEER, events.addPeer(me, false)); - socket.emit(events.types.ADD_PEER, events.addPeer(peer.id, true)); - } - }); - console.log(`[CONNECT] Client ${me} added to room ${data.url}`); + const room = data.room; + socket.join(room); + + if (!rooms[room]) { + rooms[room] = {}; + } + + rooms[room].push(socket.id); + + const sockets = await server.in(data.url).fetchSockets() + sockets.forEach((peer) => { + if (peer.id !== me) { + peer.emit(events.types.ADD_PEER, events.addPeer(me, false)); + socket.emit(events.types.ADD_PEER, events.addPeer(peer.id, 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`); + for (const room in rooms) { + if (rooms[room].includes(me)) { + rooms[room] = rooms[room].filter(id => id !== me); + socket.to(room).emit(events.types.REMOVE_PEER, events.removePeer(me)); + if (rooms[room].length === 0) { + delete rooms[room]; + } + } + } + console.log(`[DISCONNECT] Client ${me} has disconnected and has been removed from all rooms`); }); socket.on('relayICECandidate', async (data) => { - const sockets = await server.in(data.url).fetchSockets() - console.log(sockets); - sockets.forEach((peer) => { - peer.emit(events.types.ICE_CANDIDATE_RECEIVED, events.ICECandidateReceived(me, data.ice_candidate)) - }); + socket.to(data.peerId).emit(events.types.ICE_CANDIDATE_RECEIVED, events.ICECandidateReceived(me, data.candidate)) console.log(`[RELAY_ICE_CANDIDATE] ICE candidate for client ${me} has been relayed to all peers`); }); - socket.on('relaySessionDescription', async (data) => { - const sockets = await server.in(data.url).fetchSockets() - console.log(sockets); - sockets.forEach((peer) => { - peer.emit(events.types.SESSION_DESCRIPTION_RECEIVED, events.SessionDescriptionReceived(me, data.session_description)) - }); + socket.on('relayOffer', async (data) => { + + socket.to(data.peerId).emit(events.types.OFFER_RECEIVED, events.offerReceived(me, data.offer)) + console.log(`[RELAY_OFFER] ICE offer for client ${me} has been relayed to all peers`); + }); + + socket.on('relayAnswer', async (data) => { - console.log(`[RELAY_SESSION_DESCRIPTION] Session description for client ${me} has been relayed to all peers`); + socket.to(data.peerId).emit(events.types.ANSWER_RECEIVED, events.answerReceived(me, data.answer)) + console.log(`[RELAY_OFFER] ICE offer for client ${me} has been relayed to all peers`); }); }); |