-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
118 lines (95 loc) · 2.94 KB
/
server.js
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
const express = require('express')
var io = require('socket.io')
({
path: '/socket.io/'
})
const app = express()
const port = 8080
// app.get('/', (req, res) => res.send('Hello World!!!!!'))
//https://expressjs.com/en/guide/writing-middleware.html
const server = app.listen(port, () => console.log(`Example app listening on port ${port}!`))
io.listen(server)
// default namespace
io.on('connection', socket => {
console.log('connected')
})
// https://www.tutorialspoint.com/socket.io/socket.io_namespaces.htm
const peers = io.of('/webrtcPeer')
// keep a reference of all socket connections
let connectedPeers = new Map()
peers.on('connection', socket => {
connectedPeers.set(socket.id, socket)
console.log(socket.id)
socket.emit('connection-success', {
success: socket.id,
peerCount: connectedPeers.size,
})
const broadcast = () => socket.broadcast.emit('joined-peers', {
peerCount: connectedPeers.size,
})
broadcast()
const disconnectedPeer = (socketID) => socket.broadcast.emit('peer-disconnected', {
peerCount: connectedPeers.size,
socketID: socketID
})
socket.on('disconnect', () => {
console.log('disconnected')
connectedPeers.delete(socket.id)
disconnectedPeer(socket.id)
})
socket.on('onlinePeers', (data) => {
for (const [socketID, _socket] of connectedPeers.entries()) {
// don't send to self
if (socketID !=="/"+data.socketID.local) {
console.log('online-peer', data.socketID, socketID)
socket.emit('online-peer',{socketID:socketID})
}
}
})
socket.on('offer', data => {
for (const [socketID, socket] of connectedPeers.entries()) {
// don't send to self
if (socketID ==="/"+data.socketID.remote) {
console.log('Offer', data)
socket.emit('offer', {
sdp: data.payload,
socketID: data.socketID.local
}
)
}
}
})
socket.on('answer', (data) => {
for (const [socketID, socket] of connectedPeers.entries()) {
if (socketID ==="/"+ data.socketID.remote) {
console.log('Answer', socketID, data.socketID, data.payload.type)
socket.emit('answer', {
sdp: data.payload,
socketID: data.socketID.local
}
)
}
}
})
// socket.on('offerOrAnswer', (data) => {
// // send to the other peer(s) if any
// for (const [socketID, socket] of connectedPeers.entries()) {
// // don't send to self
// if (socketID !== data.socketID) {
// console.log(socketID, data.payload.type)
// socket.emit('offerOrAnswer', data.payload)
// }
// }
// })
socket.on('candidate', (data) => {
// send candidate to the other peer(s) if any
for (const [socketID, socket] of connectedPeers.entries()) {
if (socketID ==="/"+ data.socketID.remote) {
socket.emit('candidate', {
candidate: data.payload,
socketID: data.socketID.local
})
}
}
})
})