Skip to content

Commit 06e3583

Browse files
committed
allow multiple peer connections, by first disconnecting others (for issue cvan#48)
1 parent fa234ca commit 06e3583

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-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

+21-10
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,17 @@ 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+
let filtered = false;
6667
connections[pairCode].forEach(conn => {
67-
conn.peer = null;
68+
filtered = filter(conn);
69+
if (filtered) {
70+
conn.peer = null;
71+
}
6872
});
69-
connections[pairCode] = null;
73+
if (filtered) {
74+
connections[pairCode] = null;
75+
}
7076
}
7177

7278
function sendMessage (type, data) {
@@ -100,8 +106,13 @@ function SocketPeerServer (opts) {
100106
console.log('[pair] Received pairCode:', pairCode);
101107

102108
if (connections[pairCode]) {
103-
client.sendMessage('busy');
104-
return;
109+
client.sendMessage('warning', {
110+
message: '`pairCode` "' + pairCode + '" is already in use',
111+
pairCode: pairCode
112+
});
113+
closeConnection(pairCode, function (clientToCheck) {
114+
return clientToCheck !== client;
115+
});
105116
}
106117

107118
client.pairCode = pairCode;
@@ -143,14 +154,14 @@ function SocketPeerServer (opts) {
143154
});
144155

145156
client.on('close', () => {
146-
if (client.pairCode in peersWaiting &&
147-
peersWaiting[client.pairCode] === client) {
148-
peersWaiting[client.pairCode] = null;
157+
const pairCode = client.pairCode;
158+
if (pairCode in peersWaiting && peersWaiting[pairCode] === client) {
159+
peersWaiting[pairCode] = null;
149160
}
150161

151162
if (client.peer) {
152-
peersWaiting[client.pairCode] = client.peer;
153-
closeConnection(client.pairCode);
163+
peersWaiting[pairCode] = client.peer;
164+
closeConnection(pairCode);
154165
}
155166
});
156167
});

0 commit comments

Comments
 (0)