mirror of
https://github.com/Dahlgren/arma-server-web-admin.git
synced 2024-08-30 17:22:10 +00:00
Refactored manager and server into separate components injected as needed
This commit is contained in:
parent
0909ccce74
commit
7c4df71a90
6
app.js
6
app.js
@ -2,7 +2,7 @@ var express = require('express');
|
|||||||
var Resource = require('express-resource');
|
var Resource = require('express-resource');
|
||||||
|
|
||||||
var config = require('./config');
|
var config = require('./config');
|
||||||
var manager = require('./manager');
|
var Manager = require('./lib/manager');
|
||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
var server = require('http').Server(app);
|
var server = require('http').Server(app);
|
||||||
@ -14,7 +14,9 @@ app.use(express.bodyParser());
|
|||||||
app.use(express.methodOverride());
|
app.use(express.methodOverride());
|
||||||
app.use(express.static(__dirname + '/public'));
|
app.use(express.static(__dirname + '/public'));
|
||||||
|
|
||||||
var servers = require('./routes/servers');
|
var manager = new Manager(config);
|
||||||
|
manager.load();
|
||||||
|
var servers = require('./routes/servers')(manager);
|
||||||
|
|
||||||
app.resource('api/logs', require('./routes/logs'));
|
app.resource('api/logs', require('./routes/logs'));
|
||||||
app.resource('api/missions', require('./routes/missions'));
|
app.resource('api/missions', require('./routes/missions'));
|
||||||
|
59
configs/Anrop-se-Test
Normal file
59
configs/Anrop-se-Test
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
// Servername visible in the game browser.
|
||||||
|
hostname = "Anrop.se - Test";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// If set to 1, Voice over Net will not be available
|
||||||
|
disableVoN = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
116
lib/manager.js
Normal file
116
lib/manager.js
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
var events = require('events');
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
var Server = require('./server');
|
||||||
|
|
||||||
|
var filePath = "servers.json";
|
||||||
|
|
||||||
|
var Manager = function (config) {
|
||||||
|
this.config = config;
|
||||||
|
this.serversArr = [];
|
||||||
|
this.serversHash = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
Manager.prototype = new events.EventEmitter();
|
||||||
|
|
||||||
|
Manager.prototype.addServer = (function (options) {
|
||||||
|
var server = this._addServer(options);
|
||||||
|
this.save();
|
||||||
|
return server;
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype.removeServer = (function (id) {
|
||||||
|
var server = this.serversHash[id];
|
||||||
|
|
||||||
|
if (!server) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = this.serversArr.indexOf(server);
|
||||||
|
if (index > -1) {
|
||||||
|
this.serversArr.splice(index, 1);
|
||||||
|
}
|
||||||
|
this.save();
|
||||||
|
|
||||||
|
if (server.pid) {
|
||||||
|
server.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return server;
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype._addServer = (function (data) {
|
||||||
|
var server = new Server(this.config.path, this.config.type, data);
|
||||||
|
this.serversArr.push(server);
|
||||||
|
this.serversArr.sort(function(a, b) {
|
||||||
|
return a.title.localeCompare(b.title);
|
||||||
|
});
|
||||||
|
this.serversHash[server.id] = server;
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
var statusChanged = function () {
|
||||||
|
self.emit('servers');
|
||||||
|
};
|
||||||
|
server.on('state', statusChanged);
|
||||||
|
|
||||||
|
return server;
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype.getServer = (function (id) {
|
||||||
|
return this.serversHash[id];
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype.getServers = (function () {
|
||||||
|
return this.serversArr;
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype.load = (function () {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
fs.readFile(filePath, function (err, data) {
|
||||||
|
if (err) {
|
||||||
|
console.log(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSON.parse(data).forEach(function (server) {
|
||||||
|
self._addServer(server);
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
console.error("Manager load error: " + e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
Manager.prototype.save = (function () {
|
||||||
|
var data = [];
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
this.serversHash = {};
|
||||||
|
this.serversArr.forEach(function (server) {
|
||||||
|
data.push({
|
||||||
|
admin_password: server.admin_password,
|
||||||
|
battle_eye: server.battle_eye,
|
||||||
|
max_players: server.max_players,
|
||||||
|
mods: server.mods,
|
||||||
|
password: server.password,
|
||||||
|
persistent: server.persistent,
|
||||||
|
port: server.port,
|
||||||
|
title: server.title,
|
||||||
|
von: server.von,
|
||||||
|
});
|
||||||
|
|
||||||
|
self.serversHash[server.id] = server;
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFile(filePath, JSON.stringify(data), function(err) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
} else {
|
||||||
|
self.emit('servers');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = Manager;
|
@ -1,16 +1,15 @@
|
|||||||
var events = require('events');
|
var events = require('events');
|
||||||
var fs = require('fs');
|
|
||||||
var gamedig = require('gamedig');
|
var gamedig = require('gamedig');
|
||||||
var slug = require('slug');
|
var slug = require('slug');
|
||||||
var spawn = require('child_process').spawn;
|
var spawn = require('child_process').spawn;
|
||||||
|
|
||||||
var ArmaServer = require('arma-server');
|
var ArmaServer = require('arma-server');
|
||||||
|
|
||||||
var config = require('./config');
|
|
||||||
var filePath = "servers.json";
|
|
||||||
var queryInterval = 5000;
|
var queryInterval = 5000;
|
||||||
|
|
||||||
var Server = function (options) {
|
var Server = function (path, type, options) {
|
||||||
|
this.path = path;
|
||||||
|
this.type = type;
|
||||||
this.update(options);
|
this.update(options);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -34,21 +33,21 @@ Server.prototype.update = function (options) {
|
|||||||
Server.prototype.queryStatus = function() {
|
Server.prototype.queryStatus = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
Gamedig.query(
|
Gamedig.query(
|
||||||
{
|
{
|
||||||
type: 'arma3',
|
type: 'arma3',
|
||||||
host: '127.0.0.1',
|
host: '127.0.0.1',
|
||||||
port: self.port,
|
port: self.port,
|
||||||
},
|
},
|
||||||
function(state) {
|
function(state) {
|
||||||
if(state.error) {
|
if(state.error) {
|
||||||
self.state = null;
|
self.state = null;
|
||||||
} else {
|
} else {
|
||||||
self.state = state;
|
self.state = state;
|
||||||
}
|
|
||||||
|
|
||||||
self.emit('state');
|
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
self.emit('state');
|
||||||
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Server.prototype.start = function() {
|
Server.prototype.start = function() {
|
||||||
@ -60,9 +59,9 @@ Server.prototype.start = function() {
|
|||||||
mods: this.mods,
|
mods: this.mods,
|
||||||
password: this.password,
|
password: this.password,
|
||||||
passwordAdmin: this.admin_password,
|
passwordAdmin: this.admin_password,
|
||||||
path: config.path,
|
path: this.path,
|
||||||
persistent: this.persistent ? 1 : 0,
|
persistent: this.persistent ? 1 : 0,
|
||||||
platform: config.type,
|
platform: this.type,
|
||||||
players: this.max_players,
|
players: this.max_players,
|
||||||
port: this.port,
|
port: this.port,
|
||||||
});
|
});
|
||||||
@ -145,114 +144,4 @@ Server.prototype.toJSON = function () {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
var Manager = function () {
|
module.exports = Server;
|
||||||
this.serversArr = [];
|
|
||||||
this.serversHash = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
Manager.prototype = new events.EventEmitter();
|
|
||||||
|
|
||||||
Manager.prototype.addServer = (function (options) {
|
|
||||||
var server = this._addServer(options);
|
|
||||||
this.save();
|
|
||||||
return server;
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype.removeServer = (function (id) {
|
|
||||||
var server = this.serversHash[id];
|
|
||||||
|
|
||||||
if (!server) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = this.serversArr.indexOf(server);
|
|
||||||
if (index > -1) {
|
|
||||||
this.serversArr.splice(index, 1);
|
|
||||||
}
|
|
||||||
this.save();
|
|
||||||
|
|
||||||
if (server.pid) {
|
|
||||||
server.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return server;
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype._addServer = (function (data) {
|
|
||||||
var server = new Server(data);
|
|
||||||
this.serversArr.push(server);
|
|
||||||
this.serversArr.sort(function(a, b) {
|
|
||||||
return a.title.localeCompare(b.title);
|
|
||||||
});
|
|
||||||
this.serversHash[server.id] = server;
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
var statusChanged = function () {
|
|
||||||
self.emit('servers');
|
|
||||||
};
|
|
||||||
server.on('state', statusChanged);
|
|
||||||
|
|
||||||
return server;
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype.getServer = (function (id) {
|
|
||||||
return this.serversHash[id];
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype.getServers = (function () {
|
|
||||||
return this.serversArr;
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype.load = (function () {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
fs.readFile(filePath, function (err, data) {
|
|
||||||
if (err) {
|
|
||||||
console.log(err);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
JSON.parse(data).forEach(function (server) {
|
|
||||||
self._addServer(server);
|
|
||||||
});
|
|
||||||
} catch(e) {
|
|
||||||
console.error("Manager load error: " + e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
Manager.prototype.save = (function () {
|
|
||||||
var data = [];
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
this.serversHash = {};
|
|
||||||
this.serversArr.forEach(function (server) {
|
|
||||||
data.push({
|
|
||||||
admin_password: server.admin_password,
|
|
||||||
battle_eye: server.battle_eye,
|
|
||||||
max_players: server.max_players,
|
|
||||||
mods: server.mods,
|
|
||||||
password: server.password,
|
|
||||||
persistent: server.persistent,
|
|
||||||
port: server.port,
|
|
||||||
title: server.title,
|
|
||||||
von: server.von,
|
|
||||||
});
|
|
||||||
|
|
||||||
self.serversHash[server.id] = server;
|
|
||||||
});
|
|
||||||
|
|
||||||
fs.writeFile(filePath, JSON.stringify(data), function(err) {
|
|
||||||
if (err) {
|
|
||||||
throw err;
|
|
||||||
} else {
|
|
||||||
self.emit('servers');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
var manager = new Manager();
|
|
||||||
manager.load();
|
|
||||||
|
|
||||||
module.exports = manager;
|
|
@ -1,7 +1,5 @@
|
|||||||
var playwithsix = require('playwithsix');
|
var playwithsix = require('playwithsix');
|
||||||
|
|
||||||
var manager = require('./../manager');
|
|
||||||
|
|
||||||
function removeDuplicates(mods) {
|
function removeDuplicates(mods) {
|
||||||
return mods.reduce(function(a,b){
|
return mods.reduce(function(a,b){
|
||||||
if (a.indexOf(b) < 0 ) a.push(b);
|
if (a.indexOf(b) < 0 ) a.push(b);
|
||||||
@ -20,70 +18,62 @@ function resolveMods(server, cb) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.index = function (req, res){
|
module.exports = function (manager) {
|
||||||
var servers = [];
|
return {
|
||||||
|
index: function (req, res){
|
||||||
|
res.send(manager.getServers());
|
||||||
|
},
|
||||||
|
|
||||||
manager.getServers().forEach(function (server) {
|
create: function (req, res) {
|
||||||
servers.push({
|
var server = manager.addServer(req.body);
|
||||||
id: server.id,
|
if (server.mods.length > 0) {
|
||||||
title: server.title,
|
resolveMods(server, function(err) {
|
||||||
port: server.port,
|
res.send(server);
|
||||||
mods: server.mods,
|
});
|
||||||
pid: server.pid,
|
} else {
|
||||||
});
|
res.send(server);
|
||||||
});
|
}
|
||||||
|
},
|
||||||
|
|
||||||
res.send(servers);
|
show: function (req, res){
|
||||||
};
|
var server = manager.getServer(req.params.server);
|
||||||
|
|
||||||
exports.create = function (req, res){
|
|
||||||
var server = manager.addServer(req.body);
|
|
||||||
if (server.mods.length > 0) {
|
|
||||||
resolveMods(server, function(err) {
|
|
||||||
res.send(server);
|
res.send(server);
|
||||||
});
|
},
|
||||||
} else {
|
|
||||||
res.send(server);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.show = function (req, res){
|
update: function(req, res){
|
||||||
var server = manager.getServer(req.params.server);
|
var server = manager.getServer(req.params.server);
|
||||||
res.send(server);
|
server.update(req.body);
|
||||||
};
|
manager.save();
|
||||||
|
|
||||||
exports.update = function(req, res){
|
if (server.mods.length > 0) {
|
||||||
var server = manager.getServer(req.params.server);
|
resolveMods(server, function(err) {
|
||||||
server.update(req.body);
|
res.send(server);
|
||||||
manager.save();
|
});
|
||||||
|
} else {
|
||||||
|
res.send(server);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
if (server.mods.length > 0) {
|
destroy: function(req, res){
|
||||||
resolveMods(server, function(err) {
|
var server = manager.removeServer(req.params.server);
|
||||||
res.send(server);
|
res.send(server);
|
||||||
});
|
},
|
||||||
} else {
|
|
||||||
res.send(server);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.destroy = function(req, res){
|
start: function (req, res){
|
||||||
var server = manager.removeServer(req.params.server);
|
var server = manager.getServer(req.params.server);
|
||||||
res.send(server);
|
server.start();
|
||||||
};
|
res.send({status:"ok", pid: server.pid});
|
||||||
|
},
|
||||||
|
|
||||||
exports.start = function (req, res){
|
stop: function (req, res){
|
||||||
var server = manager.getServer(req.params.server);
|
var server = manager.getServer(req.params.server);
|
||||||
server.start();
|
server.stop(function () {
|
||||||
res.send({status:"ok", pid: server.pid});
|
if (!server.pid) {
|
||||||
};
|
res.send({status: true, pid: server.pid});
|
||||||
|
} else {
|
||||||
exports.stop = function (req, res){
|
res.send({status: false, pid: server.pid});
|
||||||
var server = manager.getServer(req.params.server);
|
}
|
||||||
server.stop(function () {
|
});
|
||||||
if (!server.pid) {
|
},
|
||||||
res.send({status: true, pid: server.pid});
|
};
|
||||||
} else {
|
|
||||||
res.send({status: false, pid: server.pid});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user