2015-05-19 6 views
0

необходимо транслировать во все свои комнаты, когда пользователь отключается. Мне нужно получить socket.rooms на серверной стороне disconnect событие. , но в документации говорится, что это невозможно, потому что при отключении триггеров розетка вышла из всех комнат.socketio override onclose метод

копаюсь в источник и нашел этот код:

Socket.prototype.onclose = function(reason){ 
    if (!this.connected) return this; 
    debug('closing socket - reason %s', reason); 
    this.leaveAll(); 
    this.nsp.remove(this); 
    this.client.remove(this); 
    this.connected = false; 
    this.disconnected = true; 
    delete this.nsp.connected[this.id]; 
    this.emit('disconnect', reason); 
}; 

может быть, я должен переопределить этот метод и вставить событие разъединитель, например, так:

io.on("connection", function(socket){ 

    var onclose = socket.onclose; 
    socket.onclose = function(reason){ 
     this.emit('disconnecting', reason); 
     onclose.apply(socket, reason); 
    }; 

    //other logic ... 
} 

, но этот кусок кода не Работа. нужны некоторые предложения или другое решение. ТКС.

P.S .: версия

узел: v0.12.3

socket.io версия: "1.3.2"

ответ

0

не умный способ, но в конце концов он работает.

io.on("connection", function(socket){ 

    var onclose = socket.onclose; 
    socket.onclose = function(reason){ 
     this.__disconnecting(reason); 
     onclose.call(socket, reason); 
    }; 

    socket.__disconnecting = function(reason){ 
     console.log(socket.rooms); 
    }; 

    // other logic ... 
} 
Смежные вопросы