2012-03-30 3 views
1

Я использую группы now.js и хочу слушать, когда пользователь покидает группу, поэтому я могу выполнить некоторую уборку, если группа пуста. Я считаю, что событие leave вызывается несколько раз за каждый раз, когда пользователь был в группе, т. Е. Если я присоединяюсь к группе и закрываю свой браузер 3 раза в третий раз, вызывается 3 раза.nowjs group leave event called multiple times

chatserver.prototype.joinGroup = function(groupId) { 
    //user joins group 
    var group = this.nowjs.getGroup(doc_id); 
    group.addUser(that.user.clientId); 

    //want to know when a user leaves a group 
    group.on('leave', function() { 
     console.log("user left group:"+groupId) 
     //do group clean up 
    }); 
}; 

Я делаю что-то неправильно с прицелом?

+0

Проблема, безусловно, в вашей группе массива, вы называете group.removeUser где-нибудь в вашем коде? Если вы не пытаетесь вызвать 'group.removeUser (that.user.clientId)' on nowjs disconnect event! – drinchev

+0

Я пробовал это внутри обратного вызова, но removeUser запускает событие leave, чтобы вы застряли в цикле. –

+0

Я имел в виду событие разъединения smth. например: 'nowjs.on ('disconnect', function() {group.removeUser (this.user.clientId)});'. Если у вас нет removeUser, что вызывает событие отпуска группы в исходном коде? – drinchev

ответ

0

Вы должны удалить каждого пользователя из группы, к которой она была подключена, при отключении.

Что-то вроде:

nowjs.on('disconnect', function() { 
     var that = this; 
     this.getGroups(function(groups) { 
      for (i=0 ; i < groups.length; i++) { 
       nowjs.getGroup(groups[i]).removeUser(that.user.clientId); 
      } 
     } 
} 
+0

Благодарим вас за помощь. Это похоже на работу, означающую, что событие «оставить» непригодно. Он также не позволяет пользователю оставлять только одну группу, которую мне нужно сделать. –

+0

IMHO, вы должны удалить пользователя из групп, в которых он находится, когда он отключается, потому что на каждом подключении вы снова помещаете его в группу (ы) ... событие останова по-прежнему включено, например, если кто-то покидает группу (не отключая). – drinchev

+2

Теперь я верю, что пользователь удаляет пользователя из всех групп при отключении. То, что мне действительно нужно, - это очистить группу, если кто-то уйдет. –