engine.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. // Requirments
  2. const fs = require('fs');
  3. const path = require('path');
  4. const db = require("./database");
  5. const ut = require("./utils");
  6. const gmquery = require('game-server-query');
  7. const tsquery = require('./ts-query').query;
  8. { //CODE BLOCK Type list and modifing
  9. var rawTypes = JSON.parse(fs.readFileSync("availableTypes.json", "utf-8"));
  10. var types = {};
  11. var typesFull = {};
  12. var x;
  13. for(x in rawTypes){
  14. if(!rawTypes.hasOwnProperty(x)){
  15. continue;
  16. }
  17. Object.assign(types, rawTypes[x]);
  18. for(var y in rawTypes[x]){
  19. if(rawTypes[x].hasOwnProperty(y)){
  20. typesFull[rawTypes[x][y]] = y;
  21. }
  22. }
  23. }
  24. types = ut.sortObj(types);
  25. typesFull = ut.sortObj(typesFull);
  26. exports.st = {
  27. getServerTypes: function () {
  28. return types;
  29. },
  30. getServerType: function (id) {
  31. return types[id];
  32. },
  33. getFullServerTypes: function () {
  34. return typesFull;
  35. },
  36. getFullServerType: function (id) {
  37. return typesFull[id];
  38. }
  39. };
  40. }
  41. { //CODE BLOCK Status Handlers
  42. var statusHandlers = {
  43. "game-server-query": function (type, address, callback) {
  44. var port = parseInt(address.split(":")[1]);
  45. address = address.split(":")[0];
  46. var options = {type: type, host: address};
  47. if(port){
  48. options.port = port;
  49. }
  50. gmquery(
  51. options,
  52. function(state) {
  53. if(state.error){
  54. callback({
  55. offline: true
  56. });
  57. }else {
  58. callback(state);
  59. }
  60. }
  61. );
  62. },
  63. "teamspeak-query": function (type, address, callback) {
  64. var port = parseInt(address.split(":")[1]);
  65. address = address.split(":")[0];
  66. var options = {type: type, host: address};
  67. if(port){
  68. options.port = port;
  69. }
  70. const query = tsquery(options.host, options.port, function (err, data) {
  71. if(err){
  72. callback({
  73. offline: true,
  74. error: err
  75. });
  76. }else{
  77. callback(data);
  78. }
  79. });
  80. }
  81. };
  82. }
  83. { //CODE BLOCK Status Grabber
  84. var searchQueryType = function (type) {
  85. var x;
  86. for(x in rawTypes){
  87. if(!rawTypes.hasOwnProperty(x)){
  88. continue;
  89. }
  90. var y;
  91. for(y in rawTypes[x]) {
  92. if(!rawTypes[x].hasOwnProperty(y)) {
  93. continue;
  94. }
  95. if(rawTypes[x][y] == type){
  96. return x;
  97. }
  98. }
  99. }
  100. };
  101. var responseHandlers = require("./responseHandler")(db);
  102. exports.statusGrabber = {
  103. getHandler: function (type) {
  104. var x = statusHandlers[searchQueryType(type)];
  105. if(x){
  106. return x;
  107. }
  108. throw new Error("No handler for "+type+" type");
  109. },
  110. getResponseHandler: function (type) {
  111. return responseHandlers.getHandler(type, searchQueryType(type));
  112. },
  113. getStatus: function (type, address, callback){
  114. var handler = this.getHandler(type);
  115. handler(type, address, callback);
  116. },
  117. getDetails: function (type, address, callback) {
  118. var handler = this.getHandler(type);
  119. var self = this;
  120. handler(type, address, function (data) {
  121. var resp = self.getResponseHandler(type);
  122. var details = resp(data, null, true);
  123. callback(details);
  124. });
  125. },
  126. getTraffic: function (callback) {
  127. db.traffic.findAll().then(function(servers) {
  128. callback(servers);
  129. });
  130. },
  131. getTrafficById: function (id, callback) {
  132. db.traffic.findAll({where: {
  133. serverId: id
  134. }}).then(function(servers) {
  135. callback(servers);
  136. });
  137. }
  138. };
  139. }
  140. { //CODE BLOCK Server menager
  141. exports.serverMenager = {
  142. list: function (callback) {
  143. // callback(serversList)
  144. // serversList - Array of servers
  145. db.server.findAll().then(function(servers) {
  146. callback(servers);
  147. });
  148. },
  149. getByID: function (id, callback) {
  150. db.server.findById(id).then(function (server) {
  151. callback(null, server);
  152. }).catch(function () {
  153. callback("No server with this id");
  154. });
  155. },
  156. add: function (type, address, name) {
  157. db.server.create({
  158. type: type,
  159. name: name,
  160. address: address
  161. });
  162. },
  163. remove: function (id) {
  164. db.server.destroy({
  165. where:{
  166. id: id
  167. }
  168. });
  169. }
  170. };
  171. }
  172. { //CODE BLOCK Config menager
  173. var configFilePath = path.resolve("./config.json");
  174. const defaultConfig = {
  175. lang: "en",
  176. updateInterval : 1000 * 60 * 15,
  177. port: 8080
  178. };
  179. exports.configMenager = {
  180. config: {},
  181. load: function () {
  182. if(fs.existsSync(configFilePath)){
  183. var tmp = JSON.parse(fs.readFileSync(configFilePath));
  184. var defaultKeys = Object.keys(defaultConfig);
  185. var safeConfig = {};
  186. var configProblem = false;
  187. defaultKeys.forEach(function (key) {
  188. if(tmp.hasOwnProperty(key)){
  189. safeConfig[key] = tmp[key];
  190. }else{
  191. configProblem = true;
  192. safeConfig[key] = defaultConfig[key];
  193. }
  194. });
  195. this.config = safeConfig;
  196. if (configProblem) {
  197. this.save();
  198. }
  199. }else{
  200. this.config = defaultConfig;
  201. this.save();
  202. }
  203. },
  204. save: function () {
  205. fs.writeFileSync(configFilePath, JSON.stringify(this.config, null, "\t"));
  206. }
  207. };
  208. exports.configMenager.load();
  209. }