io.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. "getAccount": (cb, accountId) => {
  37. this.mongo.models.account.findById(accountId, (err, account) => {
  38. if (err || !account)
  39. return cb({
  40. status: "failure",
  41. err: err
  42. });
  43. else
  44. return cb({
  45. status: "success",
  46. account
  47. });
  48. });
  49. },
  50. "addAccount": (cb, account) => {
  51. this.mongo.models.account.create(account, (err) => {
  52. if (err)
  53. return cb({
  54. status: "failure",
  55. err: err
  56. });
  57. else
  58. console.log("Added account!");
  59. return cb({
  60. status: "success"
  61. });
  62. });
  63. },
  64. "editAccount": (cb, accountId, account) => {
  65. this.mongo.models.account.updateOne({ _id: accountId }, account, (err) => {
  66. if (err)
  67. return cb({
  68. status: "failure",
  69. err: err
  70. });
  71. else
  72. console.log("Editted account!");
  73. return cb({
  74. status: "success"
  75. });
  76. });
  77. },
  78. "getAccountSchema": cb => {
  79. this.mongo.models.accountSchema.find({}, null, { sort: "-version", limit: 1 }, (err, res) => {
  80. if (err || !res || res.length !== 1)
  81. return cb({
  82. status: "failure",
  83. message: "Something went wrong."
  84. });
  85. else
  86. return cb({
  87. status: "success",
  88. schema: res[0]
  89. });
  90. });
  91. },
  92. "importAccountSchema": (cb, name) => {
  93. let schema = require(`../schemas/${name}`);
  94. this.mongo.models.accountSchema.create(schema, (err) => {
  95. if (err)
  96. return cb({
  97. status: "failure",
  98. err: err
  99. });
  100. else
  101. return cb({
  102. status: "success"
  103. });
  104. });
  105. }
  106. }
  107. io.on('connection', (socket) => {
  108. console.log('a user connected');
  109. Object.keys(this.handlers).forEach(handlerName => {
  110. socket.on(handlerName, (...args) => {
  111. let cb = args[args.length - 1];
  112. if (typeof cb !== "function")
  113. cb = () => {
  114. this.logger.info("IO_MODULE", `There was no callback provided for ${name}.`);
  115. }
  116. else args.pop();
  117. this.handlers[handlerName].apply(null, [cb].concat(args));
  118. });
  119. });
  120. });
  121. server.listen(8080, function(){
  122. console.log('listening on *:8080');
  123. resolve();
  124. });
  125. });
  126. }
  127. }