File tree Expand file tree Collapse file tree 4 files changed +40
-8
lines changed
Expand file tree Collapse file tree 4 files changed +40
-8
lines changed Original file line number Diff line number Diff line change 4040 - [ socket.emit(eventName[ , ...args] [ , ack ] )] ( #socketemiteventname-args-ack )
4141 - [ socket.on(eventName, callback)] ( #socketoneventname-callback )
4242 - [ socket.join(room[ , callback] )] ( #socketjoinroom-callback )
43+ - [ socket.join(rooms[ , callback] )] ( #socketjoinrooms-callback )
4344 - [ socket.leave(room[ , callback] )] ( #socketleaveroom-callback )
4445 - [ socket.to(room)] ( #sockettoroom )
4546 - [ socket.in(room)] ( #socketinroom )
@@ -476,6 +477,14 @@ io.on('connection', function(client){
476477});
477478```
478479
480+ #### socket.join(rooms[ , callback] )
481+
482+ - ` rooms ` _ (Array)_
483+ - ` callback ` _ (Function)_
484+ - ** Returns** ` Socket ` for chaining
485+
486+ Adds the client to the list of room, and fires optionally a callback with ` err ` signature (if any).
487+
479488#### socket.leave(room[ , callback] )
480489
481490 - ` room ` _ (String)_
Original file line number Diff line number Diff line change @@ -223,23 +223,31 @@ Socket.prototype.packet = function(packet, opts){
223223/**
224224 * Joins a room.
225225 *
226- * @param {String } room
226+ * @param {String|Array } room or array of rooms
227227 * @param {Function } fn optional, callback
228228 * @return {Socket } self
229229 * @api private
230230 */
231231
232- Socket . prototype . join = function ( room , fn ) {
233- debug ( 'joining room %s' , room ) ;
232+ Socket . prototype . join = function ( rooms , fn ) {
233+ debug ( 'joining room %s' , rooms ) ;
234234 var self = this ;
235- if ( this . rooms . hasOwnProperty ( room ) ) {
235+ if ( ! Array . isArray ( rooms ) ) {
236+ rooms = [ rooms ] ;
237+ }
238+ rooms = rooms . filter ( function ( room ) {
239+ return ! self . rooms . hasOwnProperty ( room ) ;
240+ } ) ;
241+ if ( ! rooms . length ) {
236242 fn && fn ( null ) ;
237243 return this ;
238244 }
239- this . adapter . add ( this . id , room , function ( err ) {
245+ this . adapter . addAll ( this . id , rooms , function ( err ) {
240246 if ( err ) return fn && fn ( err ) ;
241- debug ( 'joined room %s' , room ) ;
242- self . rooms [ room ] = room ;
247+ debug ( 'joined room %s' , rooms ) ;
248+ rooms . forEach ( function ( room ) {
249+ self . rooms [ room ] = room ;
250+ } ) ;
243251 fn && fn ( null ) ;
244252 } ) ;
245253 return this ;
Original file line number Diff line number Diff line change 2828 "engine.io" : " 2.0.2" ,
2929 "has-binary" : " 0.1.7" ,
3030 "object-assign" : " 4.1.0" ,
31- "socket.io-adapter" : " 1.0 .0" ,
31+ "socket.io-adapter" : " ~1.1 .0" ,
3232 "socket.io-client" : " socketio/socket.io-client" ,
3333 "socket.io-parser" : " 2.3.1"
3434 },
Original file line number Diff line number Diff line change @@ -2083,6 +2083,21 @@ describe('socket.io', function(){
20832083 } ) ;
20842084 } ) ;
20852085 } ) ;
2086+
2087+ it ( 'allows to join several rooms at once' , function ( done ) {
2088+ var srv = http ( ) ;
2089+ var sio = io ( srv ) ;
2090+
2091+ srv . listen ( function ( ) {
2092+ var socket = client ( srv ) ;
2093+ sio . on ( 'connection' , function ( s ) {
2094+ s . join ( [ 'a' , 'b' , 'c' ] , function ( ) {
2095+ expect ( Object . keys ( s . rooms ) ) . to . eql ( [ s . id , 'a' , 'b' , 'c' ] ) ;
2096+ done ( ) ;
2097+ } ) ;
2098+ } ) ;
2099+ } ) ;
2100+ } ) ;
20862101 } ) ;
20872102
20882103 describe ( 'middleware' , function ( done ) {
You can’t perform that action at this time.
0 commit comments