engine.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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 (callback) {
  132. db.traffic.findAll().then(function(servers) {
  133. callback(servers);
  134. });
  135. }
  136. };
  137. }
  138. { //CODE BLOCK Server menager
  139. exports.serverMenager = {
  140. list: function (callback) {
  141. // callback(serversList)
  142. // serversList - Array of servers
  143. db.server.findAll().then(function(servers) {
  144. callback(servers);
  145. });
  146. },
  147. getByID: function (id, callback) {
  148. db.server.findById(id).then(function (server) {
  149. callback(null, server);
  150. }).catch(function () {
  151. callback("No server with this id");
  152. });
  153. },
  154. add: function (type, address, name) {
  155. db.server.create({
  156. type: type,
  157. name: name,
  158. address: address
  159. });
  160. },
  161. remove: function (id) {
  162. db.server.destroy({
  163. where:{
  164. id: id
  165. }
  166. });
  167. }
  168. };
  169. }
  170. { //CODE BLOCK Config menager
  171. var configFilePath = path.resolve("./config.json");
  172. const defaultConfig = {
  173. lang: "en",
  174. updateInterval : 1000 * 60 * 15
  175. };
  176. exports.configMenager = {
  177. config: {},
  178. load: function () {
  179. if(fs.existsSync(configFilePath)){
  180. var tmp = JSON.parse(fs.readFileSync(configFilePath));
  181. var defaultKeys = Object.keys(defaultConfig);
  182. var safeConfig = {};
  183. var configProblem = false;
  184. defaultKeys.forEach(function (key) {
  185. if(tmp.hasOwnProperty(key)){
  186. safeConfig[key] = tmp[key];
  187. }else{
  188. configProblem = true;
  189. safeConfig[key] = defaultConfig[key];
  190. }
  191. });
  192. this.config = safeConfig;
  193. if (configProblem) {
  194. this.save();
  195. }
  196. }else{
  197. this.config = defaultConfig;
  198. this.save();
  199. }
  200. },
  201. save: function () {
  202. fs.writeFileSync(configFilePath, JSON.stringify(this.config, null, "\t"));
  203. }
  204. };
  205. exports.configMenager.load();
  206. }