PageRenderTime 38ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/lib/socket.js

https://gitlab.com/jfbrown/codebox
JavaScript | 66 lines | 52 code | 14 blank | 0 comment | 4 complexity | c2cf68429c27546955b58aea08759924 MD5 | raw file
Possible License(s): Apache-2.0
  1. var Q = require('q');
  2. var _ = require('lodash');
  3. var sockjs = require('sockjs');
  4. var events = require('events');
  5. var logger = require('./utils/logger')("socket");
  6. var services = {};
  7. var init = function(server, config) {
  8. var socket = sockjs.createServer({
  9. log: logger.log.bind(logger)
  10. });
  11. socket.on('connection', function(conn) {
  12. var service = (conn.pathname.split("/"))[2];
  13. logger.log("connection to service '"+service+"'");
  14. if (!services[service]) {
  15. conn.close(404, "Service not found");
  16. return logger.error("invalid service '"+service+"'");
  17. }
  18. conn.do = function(method, data) {
  19. this.write(JSON.stringify({
  20. 'method': method,
  21. 'data': data
  22. }));
  23. }.bind(conn);
  24. conn.on("data", function(data) {
  25. try {
  26. data = JSON.parse(data);
  27. } catch(e) {
  28. logger.error("error parsing data:", data);
  29. return;
  30. }
  31. if (data.method) {
  32. conn.emit("do."+data.method, data.data || {});
  33. } else {
  34. conn.emit("message", data);
  35. }
  36. });
  37. services[service].handler(conn);
  38. });
  39. socket.installHandlers(server, {
  40. prefix: '^/socket/(\\w+)'
  41. });
  42. };
  43. var addService = function(name, handler) {
  44. logger.log("add service", name);
  45. services[name] = {
  46. handler: handler
  47. };
  48. };
  49. module.exports = {
  50. init: init,
  51. service: addService
  52. };