mirror of
https://github.com/Dahlgren/arma-server-web-admin.git
synced 2024-08-30 17:22:10 +00:00
Handle start and stopping servers
This commit is contained in:
parent
f98e6e9d72
commit
c125645823
1
main.js
1
main.js
@ -19,6 +19,7 @@ app.resource('api/servers', servers);
|
|||||||
app.resource('api/settings', require('./routes/settings'));
|
app.resource('api/settings', require('./routes/settings'));
|
||||||
|
|
||||||
app.get('/api/servers/:server/start', servers.start);
|
app.get('/api/servers/:server/start', servers.start);
|
||||||
|
app.get('/api/servers/:server/stop', servers.stop);
|
||||||
|
|
||||||
app.get('/', function (req, res){
|
app.get('/', function (req, res){
|
||||||
res.sendfile(__dirname + '/public/index.html');
|
res.sendfile(__dirname + '/public/index.html');
|
||||||
|
51
manager.js
51
manager.js
@ -27,19 +27,49 @@ Server.prototype.start = function() {
|
|||||||
var mods = this.makeModsParameter();
|
var mods = this.makeModsParameter();
|
||||||
var port = this.makePortParameter();
|
var port = this.makePortParameter();
|
||||||
|
|
||||||
var server = spawn(this.armaServerPath(), [mods, port, '-config=server.cfg', '-noSound', '-world=empty']);
|
var process = spawn(this.armaServerPath(), [mods, port, '-config=server.cfg', '-noSound', '-world=empty']);
|
||||||
|
var self = this;
|
||||||
|
|
||||||
server.stdout.on('data', function (data) {
|
process.stdout.on('data', function (data) {
|
||||||
console.log('stdout: ' + data);
|
console.log('stdout: ' + data);
|
||||||
});
|
});
|
||||||
|
|
||||||
server.stderr.on('data', function (data) {
|
process.stderr.on('data', function (data) {
|
||||||
console.log('stderr: ' + data);
|
console.log('stderr: ' + data);
|
||||||
});
|
});
|
||||||
|
|
||||||
server.on('close', function (code) {
|
process.on('close', function (code) {
|
||||||
console.log('child process exited with code ' + code);
|
console.log('child process exited with code ' + code);
|
||||||
|
self.pid = null;
|
||||||
|
self.process = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.pid = process.pid;
|
||||||
|
this.process = process;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Server.prototype.stop = function(cb) {
|
||||||
|
var handled = false;
|
||||||
|
|
||||||
|
this.process.on('close', function (code) {
|
||||||
|
if (!handled) {
|
||||||
|
handled = true;
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.process.kill();
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
if (!handled) {
|
||||||
|
handled = true;
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
function Manager() {
|
function Manager() {
|
||||||
@ -87,7 +117,18 @@ Manager.prototype.load = (function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Manager.prototype.save = (function () {
|
Manager.prototype.save = (function () {
|
||||||
fs.writeFile(filePath, JSON.stringify(this.serversArr), function(err) {
|
var data = [];
|
||||||
|
|
||||||
|
this.serversArr.forEach(function (server) {
|
||||||
|
data.push({
|
||||||
|
id: server.id,
|
||||||
|
title: server.title,
|
||||||
|
port: server.port,
|
||||||
|
mods: server.mods,
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
fs.writeFile(filePath, JSON.stringify(data), function(err) {
|
||||||
if(err) throw err;
|
if(err) throw err;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -12,7 +12,8 @@ define(function (require) {
|
|||||||
template: _.template(tpl),
|
template: _.template(tpl),
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
"click #start": "start"
|
"click #start": "start",
|
||||||
|
"click #stop": "stop",
|
||||||
},
|
},
|
||||||
|
|
||||||
start: function (event) {
|
start: function (event) {
|
||||||
@ -22,7 +23,22 @@ define(function (require) {
|
|||||||
url: "/api/servers/" + this.model.get('id') + "/start",
|
url: "/api/servers/" + this.model.get('id') + "/start",
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
success: function (resp) {
|
success: function (resp) {
|
||||||
console.log(resp);
|
self.model.set("pid", resp.pid);
|
||||||
|
self.render();
|
||||||
|
},
|
||||||
|
error: $.noop
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
stop: function (event) {
|
||||||
|
var self = this;
|
||||||
|
event.preventDefault();
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/servers/" + this.model.get('id') + "/stop",
|
||||||
|
type: 'GET',
|
||||||
|
success: function (resp) {
|
||||||
|
self.model.set("pid", resp.pid);
|
||||||
|
self.render();
|
||||||
},
|
},
|
||||||
error: $.noop
|
error: $.noop
|
||||||
});
|
});
|
||||||
|
@ -1 +1,7 @@
|
|||||||
<a class="btn btn-primary" href="#" id="start">Start</a>
|
<% if (typeof(pid) != "undefined" && pid) { %>
|
||||||
|
Server is running as <%= pid %>
|
||||||
|
|
||||||
|
<a class="btn btn-primary" href="#" id="stop">Stop</a>
|
||||||
|
<% } else { %>
|
||||||
|
<a class="btn btn-primary" href="#" id="start">Start</a>
|
||||||
|
<% } %>
|
||||||
|
@ -5,7 +5,18 @@ var Manager = require('./../manager');
|
|||||||
var manager = new Manager();
|
var manager = new Manager();
|
||||||
|
|
||||||
exports.index = function (req, res){
|
exports.index = function (req, res){
|
||||||
res.send(manager.getServers());
|
var servers = [];
|
||||||
|
|
||||||
|
manager.getServers().forEach(function (server) {
|
||||||
|
servers.push({
|
||||||
|
id: server.id,
|
||||||
|
title: server.title,
|
||||||
|
port: server.port,
|
||||||
|
mods: server.mods,
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
res.send(servers);
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.create = function (req, res){
|
exports.create = function (req, res){
|
||||||
@ -29,5 +40,16 @@ exports.destroy = function(req, res){
|
|||||||
exports.start = function (req, res){
|
exports.start = function (req, res){
|
||||||
var server = manager.getServer(req.params.server);
|
var server = manager.getServer(req.params.server);
|
||||||
server.start();
|
server.start();
|
||||||
res.send({status:"ok"});
|
res.send({status:"ok", pid: server.pid});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.stop = function (req, res){
|
||||||
|
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