handler.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var protocol = require('pomelo-protocol');
  2. var Package = protocol.Package;
  3. var logger = require('pomelo-logger').getLogger('pomelo', __filename);
  4. var handlers = {};
  5. var ST_INITED = 0;
  6. var ST_WAIT_ACK = 1;
  7. var ST_WORKING = 2;
  8. var ST_CLOSED = 3;
  9. var handleHandshake = function(socket, pkg) {
  10. if(socket.state !== ST_INITED) {
  11. return;
  12. }
  13. socket.emit('handshake', JSON.parse(protocol.strdecode(pkg.body)));
  14. };
  15. var handleHandshakeAck = function(socket, pkg) {
  16. if(socket.state !== ST_WAIT_ACK) {
  17. return;
  18. }
  19. socket.state = ST_WORKING;
  20. socket.emit('heartbeat');
  21. };
  22. var handleHeartbeat = function(socket, pkg) {
  23. if(socket.state !== ST_WORKING) {
  24. return;
  25. }
  26. socket.emit('heartbeat');
  27. };
  28. var handleData = function(socket, pkg) {
  29. if(socket.state !== ST_WORKING) {
  30. return;
  31. }
  32. socket.emit('message', pkg);
  33. };
  34. handlers[Package.TYPE_HANDSHAKE] = handleHandshake;
  35. handlers[Package.TYPE_HANDSHAKE_ACK] = handleHandshakeAck;
  36. handlers[Package.TYPE_HEARTBEAT] = handleHeartbeat;
  37. handlers[Package.TYPE_DATA] = handleData;
  38. var handle = function(socket, pkg) {
  39. var handler = handlers[pkg.type];
  40. if(!!handler) {
  41. handler(socket, pkg);
  42. } else {
  43. logger.error('could not find handle invalid data package.');
  44. socket.disconnect();
  45. }
  46. };
  47. module.exports = handle;