Advertisement
Guest User

back-end

a guest
Jul 1st, 2022
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. io.on('connection', (socket) => {
  2.   socket.on('up_ice', (candidate: RTCIceCandidate) => {
  3.     const peer = upPeers.get(socket.id);
  4.     if (peer) peer.pc.addIceCandidate(new webrtc.RTCIceCandidate(candidate));
  5.   });
  6.  
  7.   socket.on('up', async (offer: RTCDataChannelInit, callback) => {
  8.     console.log('[UP] peer joined', socket.id);
  9.  
  10.     const peer = upPeers
  11.       .set(socket.id, { id: socket.id, pc: createPeerConnection() })
  12.       .get(socket.id);
  13.     if (!peer) return;
  14.  
  15.     peer.pc.ontrack = (event: RTCTrackEvent) => {
  16.       if (event.streams && event.streams[0]) {
  17.         peer.stream = event.streams[0];
  18.         socket.broadcast.emit('newUp', peer.id);
  19.       }
  20.     };
  21.  
  22.     await peer.pc.setRemoteDescription(new webrtc.RTCSessionDescription(offer));
  23.     const answer = await peer.pc.createAnswer();
  24.     await peer.pc.setLocalDescription(answer);
  25.  
  26.     callback({
  27.       upPeers: Array.from(upPeers.values()),
  28.       answer: {
  29.         sdp: answer.sdp,
  30.         type: answer.type,
  31.       },
  32.     });
  33.   });
  34.  
  35.   socket.on('down_ice', ({ consumerId, candidate }) => {
  36.     const consumer = downPeers.get(consumerId);
  37.     if (!!consumer)
  38.       consumer.addIceCandidate(new webrtc.RTCIceCandidate(candidate));
  39.   });
  40.  
  41.   socket.on('down', async ({ id, offer, consumerId }, callback) => {
  42.     console.log('[DOWN] peer joined', socket.id);
  43.     const consumer = downPeers
  44.       .set(consumerId, createPeerConnection())
  45.       .get(consumerId);
  46.     if (!consumer) return;
  47.  
  48.     await consumer.setRemoteDescription(
  49.       new webrtc.RTCSessionDescription(offer),
  50.     );
  51.  
  52.     const peer = upPeers.get(id);
  53.     if (!peer?.stream) return;
  54.  
  55.     const remoteStream = peer.stream;
  56.     remoteStream.getTracks().forEach((track) => {
  57.       consumer.addTrack(track, remoteStream);
  58.     });
  59.  
  60.     const answer = await consumer.createAnswer();
  61.     await consumer.setLocalDescription(answer);
  62.  
  63.     callback(answer);
  64.   });
  65.  
  66.   socket.on('disconnect', () => {
  67.     console.log('user disconnected', socket.id);
  68.  
  69.     upPeers.delete(socket.id);
  70.     downPeers.delete(socket.id);
  71.  
  72.     socket.broadcast.emit('producerLeft', socket.id);
  73.   });
  74. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement