2013-12-15 25 views
1

的NodeBB論壇https://github.com/designcreateplay/NodeBB使用一個io.sockets對象似乎並不是相同的JavaScript in方法這裏https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/inin方法,但我沒有看到in方法插座.io文檔。的JavaScript方法

什麼是in方法在下面的代碼中執行?

下面的ThreadTools.lock方法調用一個方法websockets.in,如您在這裏看到的只是returns io.sockets.in(room)。我

websockets.in = function(room) { 
     return io.sockets.in(room); 
    }; 

ThreadTools.lock

ThreadTools.lock = function(tid, socket) { 
    topics.setTopicField(tid, 'locked', 1); 

    if (socket) { 
     websockets.in('topic_' + tid).emit('event:topic_locked', { 
      tid: tid, 
      status: 'ok' 
     }); 

     if (socket) { 
      socket.emit('api:topic.lock', { 
       status: 'ok', 
       tid: tid 
      }); 
     } 
    } 
} 

回答

1

wiki

有兩種方法用於發射到一個房間:或者使用socket.broadcast.to('room')io.sockets.in('room')

2

嘿@BrainLikeADullPencil!

我們使用.in()向特定「房間」中的用戶發送消息。對於ThreadTools.lock,它將發送event:topic.locked消息給該主題房間中的所有用戶(用戶在瀏覽主題時自動加入主題房間)。

在客戶端,我們聽取該消息並鎖定DOM中的主題(加上其他各種小改動)