lang/node

socket.io disconnect 전에 socket.leave 처리

C/H 2016. 3. 9. 08:30

socket.io 1.x 에서 disconnect 이벤트는 socket 에 저장된 id가 이미 삭제된 상태로 disconnect 이벤트가 처리된다.
join된 room정보가 필요할 경우 socket.io 의 onclose 를 오버라이딩해서 처리하면 된다.

io.of('/').on('connection', function(socket) {

	// overridding, ref:node_modules/socket.io/lib/socket.js:416
	socket.onclose = function( reason ){
		if (!this.connected) return this;
		//debug('closing socket - reason %s', reason);
		myfunc( this.id ); // myfunc();
		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);
	};

	socket.emit('connected', 'welcome to socket server');

	socket.on('event', function( data ){
		// process
	});
});


반응형