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