2013-07-31 2 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 начинает выдавать событие таймера в лобби. Таким образом, он выбрался в неправильную комнату.

Log:

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

На самом деле, это ошибка (?), Вы не можете использовать «Номер» в качестве идентификатора комнаты. Только строка.

0

я думаю, что проблема в этом: "начиная с 0". Не используйте 0 для названия комнаты.

Смежные вопросы