Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- io.on('connection', (socket) => {
- socket.on('up_ice', (candidate: RTCIceCandidate) => {
- const peer = upPeers.get(socket.id);
- if (peer) peer.pc.addIceCandidate(new webrtc.RTCIceCandidate(candidate));
- });
- socket.on('up', async (offer: RTCDataChannelInit, callback) => {
- console.log('[UP] peer joined', socket.id);
- const peer = upPeers
- .set(socket.id, { id: socket.id, pc: createPeerConnection() })
- .get(socket.id);
- if (!peer) return;
- peer.pc.ontrack = (event: RTCTrackEvent) => {
- if (event.streams && event.streams[0]) {
- peer.stream = event.streams[0];
- socket.broadcast.emit('newUp', peer.id);
- }
- };
- await peer.pc.setRemoteDescription(new webrtc.RTCSessionDescription(offer));
- const answer = await peer.pc.createAnswer();
- await peer.pc.setLocalDescription(answer);
- callback({
- upPeers: Array.from(upPeers.values()),
- answer: {
- sdp: answer.sdp,
- type: answer.type,
- },
- });
- });
- socket.on('down_ice', ({ consumerId, candidate }) => {
- const consumer = downPeers.get(consumerId);
- if (!!consumer)
- consumer.addIceCandidate(new webrtc.RTCIceCandidate(candidate));
- });
- socket.on('down', async ({ id, offer, consumerId }, callback) => {
- console.log('[DOWN] peer joined', socket.id);
- const consumer = downPeers
- .set(consumerId, createPeerConnection())
- .get(consumerId);
- if (!consumer) return;
- await consumer.setRemoteDescription(
- new webrtc.RTCSessionDescription(offer),
- );
- const peer = upPeers.get(id);
- if (!peer?.stream) return;
- const remoteStream = peer.stream;
- remoteStream.getTracks().forEach((track) => {
- consumer.addTrack(track, remoteStream);
- });
- const answer = await consumer.createAnswer();
- await consumer.setLocalDescription(answer);
- callback(answer);
- });
- socket.on('disconnect', () => {
- console.log('user disconnected', socket.id);
- upPeers.delete(socket.id);
- downPeers.delete(socket.id);
- socket.broadcast.emit('producerLeft', socket.id);
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement