| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- // Requirments
- const fs = require('fs');
- const path = require('path');
- const db = require("./database");
- const ut = require("./utils");
- const gmquery = require('game-server-query');
- const tsquery = require('./ts-query').query;
- { //CODE BLOCK Type list and modifing
- var rawTypes = JSON.parse(fs.readFileSync("availableTypes.json", "utf-8"));
- var types = {};
- var typesFull = {};
- var x;
- for(x in rawTypes){
- if(!rawTypes.hasOwnProperty(x)){
- continue;
- }
- Object.assign(types, rawTypes[x]);
- for(var y in rawTypes[x]){
- if(rawTypes[x].hasOwnProperty(y)){
- typesFull[rawTypes[x][y]] = y;
- }
- }
- }
- types = ut.sortObj(types);
- typesFull = ut.sortObj(typesFull);
- exports.st = {
- getServerTypes: function () {
- return types;
- },
- getServerType: function (id) {
- return types[id];
- },
- getFullServerTypes: function () {
- return typesFull;
- },
- getFullServerType: function (id) {
- return typesFull[id];
- }
- };
- }
- { //CODE BLOCK Status Handlers
- var statusHandlers = {
- "game-server-query": function (type, address, callback) {
- var port = parseInt(address.split(":")[1]);
- address = address.split(":")[0];
- var options = {type: type, host: address};
- if(port){
- options.port = port;
- }
- gmquery(
- options,
- function(state) {
- if(state.error){
- callback({
- offline: true
- });
- }else {
- callback(state);
- }
- }
- );
- },
- "teamspeak-query": function (type, address, callback) {
- var port = parseInt(address.split(":")[1]);
- address = address.split(":")[0];
- var options = {type: type, host: address};
- if(port){
- options.port = port;
- }
- const query = tsquery(options.host, options.port, function (err, data) {
- if(err){
- callback({
- offline: true,
- error: err
- });
- }else{
- callback(data);
- }
- });
- }
- };
- }
- { //CODE BLOCK Status Grabber
- var searchQueryType = function (type) {
- var x;
- for(x in rawTypes){
- if(!rawTypes.hasOwnProperty(x)){
- continue;
- }
- var y;
- for(y in rawTypes[x]) {
- if(!rawTypes[x].hasOwnProperty(y)) {
- continue;
- }
- if(rawTypes[x][y] == type){
- return x;
- }
- }
- }
- };
- var responseHandlers = require("./responseHandler")(db);
- var trafficAtributes = [
- "players",
- "maxplayers",
- "createdAt",
- "serverId"
- ];
- exports.statusGrabber = {
- getHandler: function (type) {
- var x = statusHandlers[searchQueryType(type)];
- if(x){
- return x;
- }
- throw new Error("No handler for "+type+" type");
- },
- getResponseHandler: function (type) {
- return responseHandlers.getHandler(type, searchQueryType(type));
- },
- getStatus: function (type, address, callback){
- var handler = this.getHandler(type);
- handler(type, address, callback);
- },
- getDetails: function (type, address, callback) {
- var handler = this.getHandler(type);
- var self = this;
- handler(type, address, function (data) {
- var resp = self.getResponseHandler(type);
- var details = resp(data, null, true);
- callback(details);
- });
- },
- getTraffic: function (callback) {
- db.traffic.findAll({
- attributes: trafficAtributes
- }).then(function(servers) {
- callback(servers);
- });
- },
- getTrafficById: function (id, callback) {
- db.traffic.findAll({where: {
- serverId: id
- },
- attributes: trafficAtributes
- }).then(function(servers) {
- callback(servers);
- });
- },
- getTrafficByRange: function (from, to, id, callback) {
- db.traffic.findAll({where: {
- serverId: id,
- createdAt: {
- $gt: from,
- $lt: to
- }
- },
- attributes: trafficAtributes
- }).then(function(records) {
- callback(records);
- });
- },
- pretty: {
- day: function (date, id, callback) {
- var from = new Date(date.toDateString()),
- to = new Date(from.valueOf() + 1000*60*60*24);
- exports.statusGrabber.getTrafficByRange(from, to, id, callback);
- },
- month: function (date, id, callback) {
- var from = new Date(date.toDateString());
- from.setUTCDate(1);
- var to = new Date(from);
- for(var m = to.getUTCMonth(); to.getUTCMonth() === m;){
- to = new Date(to.valueOf() + 1000*60*60*24);
- }
- exports.statusGrabber.getTrafficByRange(from, to, id, callback);
- },
- year: function (date, id, callback) {
- var from = new Date(date.toDateString());
- from.setUTCDate(1);
- from.setUTCMonth(0);
- var to = new Date(from);
- to.setUTCFullYear(to.getUTCFullYear() + 1);
- exports.statusGrabber.getTrafficByRange(from, to, id, callback);
- }
- }
- };
- }
- { //CODE BLOCK Server menager
- exports.serverMenager = {
- list: function (callback) {
- // callback(serversList)
- // serversList - Array of servers
- db.server.findAll().then(function(servers) {
- callback(servers);
- });
- },
- getByID: function (id, callback) {
- db.server.findById(id).then(function (server) {
- callback(null, server);
- }).catch(function () {
- callback("No server with this id");
- });
- },
- add: function (type, address, name) {
- db.server.create({
- type: type,
- name: name,
- address: address
- });
- },
- remove: function (id) {
- db.server.destroy({
- where:{
- id: id
- }
- });
- }
- };
- }
- { //CODE BLOCK Config menager
- var configFilePath = path.resolve("./config.json");
- const defaultConfig = {
- lang: "en",
- updateInterval : 1000 * 60 * 15,
- port: 8080,
- updateState: true
- };
- exports.configMenager = {
- config: {},
- load: function () {
- if(fs.existsSync(configFilePath)){
- var tmp = JSON.parse(fs.readFileSync(configFilePath));
- var defaultKeys = Object.keys(defaultConfig);
- var safeConfig = {};
- var configProblem = false;
- defaultKeys.forEach(function (key) {
- if(tmp.hasOwnProperty(key)){
- safeConfig[key] = tmp[key];
- }else{
- configProblem = true;
- safeConfig[key] = defaultConfig[key];
- }
- });
- this.config = safeConfig;
- if (configProblem) {
- this.save();
- }
- }else{
- this.config = defaultConfig;
- this.save();
- }
- },
- save: function () {
- fs.writeFileSync(configFilePath, JSON.stringify(this.config, null, "\t"));
- }
- };
- exports.configMenager.load();
- }
|