@@ -62,11 +62,21 @@ function SocketPeerServer (opts) {
62
62
var peersWaiting = Object . create ( null ) ;
63
63
var connections = Object . create ( null ) ;
64
64
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 ;
66
71
connections [ pairCode ] . forEach ( conn => {
67
- conn . peer = null ;
72
+ matched = filter ( conn ) ;
73
+ if ( matched ) {
74
+ conn . peer = null ;
75
+ }
68
76
} ) ;
69
- connections [ pairCode ] = null ;
77
+ if ( matched ) {
78
+ connections [ pairCode ] = null ;
79
+ }
70
80
}
71
81
72
82
function sendMessage ( type , data ) {
@@ -100,8 +110,13 @@ function SocketPeerServer (opts) {
100
110
console . log ( '[pair] Received pairCode:' , pairCode ) ;
101
111
102
112
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
+ } ) ;
105
120
}
106
121
107
122
client . pairCode = pairCode ;
@@ -143,14 +158,14 @@ function SocketPeerServer (opts) {
143
158
} ) ;
144
159
145
160
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 ;
149
164
}
150
165
151
166
if ( client . peer ) {
152
- peersWaiting [ client . pairCode ] = client . peer ;
153
- closeConnection ( client . pairCode ) ;
167
+ peersWaiting [ pairCode ] = client . peer ;
168
+ closeConnection ( pairCode ) ;
154
169
}
155
170
} ) ;
156
171
} ) ;
0 commit comments