diff --git a/.gitignore b/.gitignore index 08c09d9..90716b3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,3 @@ node_modules # Project stuff config.js -servers.js diff --git a/main.js b/main.js index ad60101..fa1b3c6 100644 --- a/main.js +++ b/main.js @@ -1,10 +1,13 @@ var express = require('express'), - fs = require('fs'); + fs = require('fs'), + slug = require('slug'); var config = require('./config'), + Manager = require('./manager'), servers = require('./servers'); var app = express(); +var manager = new Manager(); app.use(express.logger('dev')); app.use(express.cookieParser()); @@ -39,7 +42,19 @@ app.get('/api/mods', function (req, res){ }); app.get('/api/servers', function (req, res){ - res.send(servers); + res.send(manager.servers); +}); + +app.post('/api/servers', function (req, res){ + var title = req.body.title; + var id = slug(title); + manager.addServer(id, title); + res.send(manager.servers); +}); + +app.get('/api/servers/:id/start', function (req, res){ + manager.runServer(); + res.send({status:"ok"}); }); app.get('/api/settings', function (req, res){ diff --git a/manager.js b/manager.js new file mode 100644 index 0000000..3d09d9a --- /dev/null +++ b/manager.js @@ -0,0 +1,53 @@ +var spawn = require('child_process').spawn; + +var config = require('./config'); + +function Server(id, title, port, mods) { + this.id = id; + this.title = title; + this.port = port; + this.mods = mods; +} + +Server.prototype.armaServerPath = function() { + return config.path + '/arma3server'; +} + +Server.prototype.makeModsParameter = function() { + return '-mod=' + this.mods.join(';'); +} + +Server.prototype.makePortParameter = function() { + return '-port=' + this.port; +} + +Server.prototype.start = function() { + var mods = this.makeModsParameter(); + var port = this.makePortParameter(); + + var server = spawn(this.armaServerPath(), [mods, port, '-config=server.cfg', '-noSound', '-world=empty']); + + server.stdout.on('data', function (data) { + console.log('stdout: ' + data); + }); + + server.stderr.on('data', function (data) { + console.log('stderr: ' + data); + }); + + server.on('close', function (code) { + console.log('child process exited with code ' + code); + }); +} + +function Manager() { + this.servers = []; +}; + +Manager.prototype.addServer = (function (id, title) { + mods = []; + port = 2302; + this.servers.push(new Server(id, title, port, mods)); +}); + +module.exports = Manager; \ No newline at end of file diff --git a/package.json b/package.json index 6236893..fb62eee 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "express": "3.x" + "express": "3.x", + "slug": "~0.4.0" } -} \ No newline at end of file +} diff --git a/public/js/tpl/servers/list_item.html b/public/js/tpl/servers/list_item.html index 3f79d01..73f5ecc 100644 --- a/public/js/tpl/servers/list_item.html +++ b/public/js/tpl/servers/list_item.html @@ -1,2 +1,2 @@ -<%-name%> +<%-title%> \ No newline at end of file diff --git a/servers.js.example b/servers.js.example deleted file mode 100644 index 9b724eb..0000000 --- a/servers.js.example +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = [ - {name: "first-server"}, - {name: "second-server"} -];