UNPKG

eazy-pomelo

Version:
70 lines (59 loc) 1.58 kB
var protocol = require('pomelo-protocol'); var Package = protocol.Package; var logger = require('pomelo-logger').getLogger('pomelo', __filename); var handlers = {}; var ST_INITED = 0; var ST_WAIT_ACK = 1; var ST_WORKING = 2; var ST_CLOSED = 3; var handleHandshake = function(socket, pkg) { if(socket.state !== ST_INITED) { return; } try { socket.emit('handshake', JSON.parse(protocol.strdecode(pkg.body))); } catch (ex) { socket.emit('handshake', {}); } }; var handleHandshakeAck = function(socket, pkg) { if(socket.state !== ST_WAIT_ACK) { return; } socket.state = ST_WORKING; socket.emit('heartbeat'); }; var handleHeartbeat = function(socket, pkg) { if(socket.state !== ST_WORKING) { return; } socket.emit('heartbeat'); }; var handleKick = function(socket, pkg) { if(socket.state == ST_CLOSED) { return; } logger.info('client %j positive disconnect.', socket.id); socket.disconnect(); }; var handleData = function(socket, pkg) { if(socket.state !== ST_WORKING) { return; } socket.emit('message', pkg); }; handlers[Package.TYPE_HANDSHAKE] = handleHandshake; handlers[Package.TYPE_HANDSHAKE_ACK] = handleHandshakeAck; handlers[Package.TYPE_HEARTBEAT] = handleHeartbeat; handlers[Package.TYPE_DATA] = handleData; handlers[Package.TYPE_KICK] = handleKick; var handle = function(socket, pkg) { var handler = handlers[pkg.type]; if(!!handler) { handler(socket, pkg); } else { logger.error('could not find handle invalid data package.'); //socket.disconnect(); } }; module.exports = handle;