io.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. 'use strict';
  2. // This file contains all the logic for Socket.IO
  3. const coreClass = require("../core");
  4. const async = require("async");
  5. const config = require("config");
  6. const express = require("express");
  7. const http = require("http");
  8. const socketio = require('socket.io');
  9. module.exports = class extends coreClass {
  10. constructor(name, moduleManager) {
  11. super(name, moduleManager);
  12. this.dependsOn = ["mongo"];
  13. }
  14. initialize() {
  15. return new Promise(resolve => {
  16. this.setStage(1);
  17. const app = express();
  18. const server = http.createServer(app);
  19. const io = socketio(server);
  20. this.mongo = this.moduleManager.modules["mongo"];
  21. this.handlers = {
  22. "getAccounts": cb => {
  23. cb({
  24. accounts: []
  25. });
  26. },
  27. "getAccountSchema": cb => {
  28. this.mongo.models.accountSchema.find({}, null, { sort: ["version"], limit: 1 }, (err, res) => {
  29. if (err || !res || res.length !== 1)
  30. return cb({
  31. status: "failure",
  32. message: "Something went wrong."
  33. });
  34. else
  35. return cb({
  36. status: "success",
  37. schema: res[0]
  38. });
  39. });
  40. },
  41. "importAccountSchema": (cb, name) => {
  42. let schema = require(`../schemas/${name}`);
  43. this.mongo.models.accountSchema.create(schema, (err) => {
  44. if (err)
  45. return cb({
  46. status: "failure",
  47. err: err
  48. });
  49. else
  50. return cb({
  51. status: "success"
  52. });
  53. });
  54. }
  55. }
  56. io.on('connection', (socket) => {
  57. console.log('a user connected');
  58. Object.keys(this.handlers).forEach(handlerName => {
  59. socket.on(handlerName, (...args) => {
  60. let cb = args[args.length - 1];
  61. if (typeof cb !== "function")
  62. cb = () => {
  63. this.logger.info("IO_MODULE", `There was no callback provided for ${name}.`);
  64. }
  65. else args.pop();
  66. this.handlers[handlerName].apply(null, [cb].concat(args));
  67. });
  68. });
  69. });
  70. server.listen(8080, function(){
  71. console.log('listening on *:8080');
  72. resolve();
  73. });
  74. });
  75. }
  76. }