1
0

io.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. this.mongo.models.account.find({}, (err, accounts) => {
  24. if (err)
  25. return cb({
  26. status: "failure",
  27. err: err
  28. });
  29. else
  30. return cb({
  31. status: "success",
  32. accounts
  33. });
  34. });
  35. },
  36. "addAccount": (cb, account) => {
  37. this.mongo.models.account.create(account, (err) => {
  38. if (err)
  39. return cb({
  40. status: "failure",
  41. err: err
  42. });
  43. else
  44. console.log("Added account!");
  45. return cb({
  46. status: "success"
  47. });
  48. });
  49. },
  50. "getAccountSchema": cb => {
  51. this.mongo.models.accountSchema.find({}, null, { sort: "-version", limit: 1 }, (err, res) => {
  52. if (err || !res || res.length !== 1)
  53. return cb({
  54. status: "failure",
  55. message: "Something went wrong."
  56. });
  57. else
  58. return cb({
  59. status: "success",
  60. schema: res[0]
  61. });
  62. });
  63. },
  64. "importAccountSchema": (cb, name) => {
  65. let schema = require(`../schemas/${name}`);
  66. this.mongo.models.accountSchema.create(schema, (err) => {
  67. if (err)
  68. return cb({
  69. status: "failure",
  70. err: err
  71. });
  72. else
  73. return cb({
  74. status: "success"
  75. });
  76. });
  77. }
  78. }
  79. io.on('connection', (socket) => {
  80. console.log('a user connected');
  81. Object.keys(this.handlers).forEach(handlerName => {
  82. socket.on(handlerName, (...args) => {
  83. let cb = args[args.length - 1];
  84. if (typeof cb !== "function")
  85. cb = () => {
  86. this.logger.info("IO_MODULE", `There was no callback provided for ${name}.`);
  87. }
  88. else args.pop();
  89. this.handlers[handlerName].apply(null, [cb].concat(args));
  90. });
  91. });
  92. });
  93. server.listen(8080, function(){
  94. console.log('listening on *:8080');
  95. resolve();
  96. });
  97. });
  98. }
  99. }