Skip to content

Commit 569d540

Browse files
authored
Merge pull request #49 from WebVRRocks/replace-peer-connections
allow multiple peer connections, by first disconnecting others (for issue #48)
2 parents fa234ca + f07b054 commit 569d540

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,6 @@ peer.on('data', function (data) {
5252
console.log('data received:', data);
5353
});
5454

55-
peer.on('busy', function () {
56-
console.error('`pairCode` "%s" is already in use', peer.pairCode);
57-
});
58-
5955
peer.on('rtc.signal', function () {
6056
console.log('WebRTC signalling');
6157
});
@@ -78,6 +74,10 @@ peer.on('downgrade', function () {
7874
console.log('downgraded WebRTC peer connection ⇒ to WebSocket connection');
7975
});
8076

77+
peer.on('warning', function (data) {
78+
console.error('warning:', data.message);
79+
});
80+
8181
peer.on('error', function (err) {
8282
console.error('error:', err);
8383
});

server/index.js

+25-10
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,21 @@ function SocketPeerServer (opts) {
6262
var peersWaiting = Object.create(null);
6363
var connections = Object.create(null);
6464

65-
function closeConnection (pairCode) {
65+
function closeConnection (pairCode, filter) {
66+
if (!filter) {
67+
// Create a no-op function.
68+
filter = x => x;
69+
}
70+
let matched = false;
6671
connections[pairCode].forEach(conn => {
67-
conn.peer = null;
72+
matched = filter(conn);
73+
if (matched) {
74+
conn.peer = null;
75+
}
6876
});
69-
connections[pairCode] = null;
77+
if (matched) {
78+
connections[pairCode] = null;
79+
}
7080
}
7181

7282
function sendMessage (type, data) {
@@ -100,8 +110,13 @@ function SocketPeerServer (opts) {
100110
console.log('[pair] Received pairCode:', pairCode);
101111

102112
if (connections[pairCode]) {
103-
client.sendMessage('busy');
104-
return;
113+
client.sendMessage('warning', {
114+
message: '`pairCode` "' + pairCode + '" is already in use',
115+
pairCode: pairCode
116+
});
117+
closeConnection(pairCode, function (clientToCheck) {
118+
return clientToCheck !== client;
119+
});
105120
}
106121

107122
client.pairCode = pairCode;
@@ -143,14 +158,14 @@ function SocketPeerServer (opts) {
143158
});
144159

145160
client.on('close', () => {
146-
if (client.pairCode in peersWaiting &&
147-
peersWaiting[client.pairCode] === client) {
148-
peersWaiting[client.pairCode] = null;
161+
const pairCode = client.pairCode;
162+
if (pairCode in peersWaiting && peersWaiting[pairCode] === client) {
163+
peersWaiting[pairCode] = null;
149164
}
150165

151166
if (client.peer) {
152-
peersWaiting[client.pairCode] = client.peer;
153-
closeConnection(client.pairCode);
167+
peersWaiting[pairCode] = client.peer;
168+
closeConnection(pairCode);
154169
}
155170
});
156171
});

0 commit comments

Comments
 (0)