handler.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. try {
  14. socket.emit('handshake', JSON.parse(protocol.strdecode(pkg.body)));
  15. } catch (ex) {
  16. socket.emit('handshake', {});
  17. }
  18. };
  19. var handleHandshakeAck = function(socket, pkg) {
  20. if(socket.state !== ST_WAIT_ACK) {
  21. return;
  22. }
  23. socket.state = ST_WORKING;
  24. socket.emit('heartbeat');
  25. };
  26. var handleHeartbeat = function(socket, pkg) {
  27. if(socket.state !== ST_WORKING) {
  28. return;
  29. }
  30. socket.emit('heartbeat');
  31. };
  32. var handleData = function(socket, pkg) {
  33. if(socket.state !== ST_WORKING) {
  34. return;
  35. }
  36. socket.emit('message', pkg);
  37. };
  38. handlers[Package.TYPE_HANDSHAKE] = handleHandshake;
  39. handlers[Package.TYPE_HANDSHAKE_ACK] = handleHandshakeAck;
  40. handlers[Package.TYPE_HEARTBEAT] = handleHeartbeat;
  41. handlers[Package.TYPE_DATA] = handleData;
  42. var handle = function(socket, pkg) {
  43. var handler = handlers[pkg.type];
  44. if(!!handler) {
  45. handler(socket, pkg);
  46. } else {
  47. logger.error('could not find handle invalid data package.');
  48. socket.disconnect();
  49. }
  50. };
  51. module.exports = handle;