2013-07-31 102 views
0

我正在寫一個遊戲並使用socket.io。遊戲中的每個地圖都由socket.io中的一個房間表示。Socket.io發射到不存在的房間

它的工作原理是這樣的。用戶運行一個客戶端並加入socket.io中的一個空房間的主房間(大廳),從那裏用戶可以創建一個房間,roomId是數字,從0(0,1,2,3等)開始, 。當用戶加入房間時,它會啓動一個定時器 - 倒計時直到當前地圖結束。

__startTimer:function() 
{ 
    this.__timerId=setInterval(this.__onTimerTick.bind(this), 1000); 
}, 

__onTimerTick:function() 
{ 
    var string="Timer event in room "+this.__roomId+", list of socket.io rooms:"; 
    console.log(string); 
    console.log(g.socketIo.sockets.manager.rooms); 

    this.__duration--; 
    g.socketIo.sockets.in(this.__roomId).emit(g.messages.FIGHT_TIMER_TICK_EVENT, {time: this.__duration}); 
    if(this.__duration==0) 
    { 
     clearInterval(this.__timerId); 
     this.__fightEnd(); 
    } 
}, 

的問題在於,當用戶關閉他的客戶,他離開房間,如果沒有更多的用戶在室內,它的破壞。但是當用戶再次運行客戶端時,加入大廳,socket.io開始向大廳發送定時器事件。所以它發射到錯誤的房間。

登錄:

info: socket.io started 
debug: client authorized 
info: handshake authorized iFE6tqsa_lThtxv8wsoi 
debug: setting request GET /socket.io/1/flashsocket/iFE6tqsa_lThtxv8wsoi 
debug: set heartbeat interval for client iFE6tqsa_lThtxv8wsoi 
debug: client authorized for 

Timer event in room 0, list of socket.io rooms: 
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ], 
    '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] } 
debug: flashsocket writing 5:::{"name":"104","args":[{"time":179}]} 
Timer event in room 0, list of socket.io rooms: 
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ], 
    '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] } 
debug: flashsocket writing 5:::{"name":"104","args":[{"time":178}]} 
Timer event in room 0, list of socket.io rooms: 
{ '': [ 'iFE6tqsa_lThtxv8wsoi' ], 
    '/0': [ 'iFE6tqsa_lThtxv8wsoi' ] } 
debug: flashsocket writing 5:::{"name":"104","args":[{"time":177}]} 

info: transport end (socket end) 
debug: set close timeout for client iFE6tqsa_lThtxv8wsoi 
debug: cleared close timeout for client iFE6tqsa_lThtxv8wsoi 
debug: cleared heartbeat interval for client iFE6tqsa_lThtxv8wsoi 
debug: discarding transport 

Timer event in room 0, list of socket.io rooms: 
{} 
Timer event in room 0, list of socket.io rooms: 
{} 
Timer event in room 0, list of socket.io rooms: 
{} 
Timer event in room 0, list of socket.io rooms: 
{} 

debug: client authorized 
info: handshake authorized z540AkrvWAb5X4Lzwsoj 
debug: setting request GET /socket.io/1/flashsocket/z540AkrvWAb5X4Lzwsoj 
debug: set heartbeat interval for client z540AkrvWAb5X4Lzwsoj 
debug: client authorized for 

Timer event in room 0, list of socket.io rooms: 
{ '': [ 'z540AkrvWAb5X4Lzwsoj' ] } 
debug: flashsocket writing 5:::{"name":"104","args":[{"time":158}]} 
Timer event in room 0, list of socket.io rooms: 
{ '': [ 'z540AkrvWAb5X4Lzwsoj' ] } 

回答

0

其實,這是一個錯誤(?),你不能使用「數字」作爲房間ID。只有字符串。

0

我認爲這個問題是這樣的: 「從0開始」。不要使用0作爲房間名稱。