forked from johnkeates/gsd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgsd.js
148 lines (114 loc) · 5.35 KB
/
gsd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
var gameserver = require('./gameprocess');
var restify = require('restify');
var config = require('./config.json');
var unknownMethodHandler = require('./utls.js').unknownMethodHandler;
var saveconfig = require('./utls.js').saveconfig;
var authenticate = require('./auth.js').authenticate;
var fs = require('fs');
var servers = [];
var plugins = require('./plugins').plugins;
var io = require('socket.io').listen(config.daemon.consoleport);
Object.keys(config.servers).forEach(function(item, index) {
initServer(index);
});
function initServer(index){
data = config.servers[index];
servers[index] = new gameserver(data);
servers[index].console = io.of('/'+index);
servers[index].on('console', function(data){
servers[index].console.emit('console', {'l':data.toString()});
});
servers[index].on('statuschange', function(data) {
servers[index].console.emit('statuschange', {'status':servers[index].status});
});
servers[index].on('query', function(data) {
servers[index].console.emit('query', {"query":servers[index].lastquery()});
});
servers[index].on('processStats', function(data) {
servers[index].console.emit('process', {"process":servers[index].usagestats});
});
servers[index].console.on('sendconsole', function (command) {
console.log(command);
});
}
var restserver = restify.createServer();
restserver.use(restify.bodyParser());
restserver.use(restify.authorizationParser());
restserver.on('MethodNotAllowed', unknownMethodHandler);
restserver.use(authenticate);
restserver.use(
function crossOrigin(req,res,next){
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
return next();
}
);
restserver.get('/', function info(req, res, next){
_plugins = {}
for (var key in plugins) {
settings = plugins[key];
_plugins[settings.name] = {"file":key.slice(0, -3)};
}
response = {'plugins':_plugins, 'settings':{'consoleport':config.daemon.consoleport}};
res.send(response);
});
restserver.get('/gameservers/', function info(req, res, next){
response = [];
servers.forEach(
function(service){
response.push(service.info());
});
res.send(response);
});
restserver.post('/gameservers/', function info(req, res, next){
id = config.servers.push(JSON.parse(req.params['settings']));
// Stupid java indexes
id = id - 1;
saveconfig(config);
initServer(id);
service = servers[id];
service.create();
res.send({"id":String(id)});
});
restserver.del('/gameservers/:id', function info(req, res, next){
service = servers[req.params.id];
// TODO: if on, turn off
service.delete();
id = config.servers.splice(req.params.id,1);
saveconfig(config);
res.send("ok");
});
restserver.get('/gameservers/:id', function (req, res, next){
service = servers[req.params.id];
res.send(service.info());
});
restserver.put('/gameservers/:id', function info(req, res, next){
service = servers[req.params.id];
config.servers[req.params.id].variables = req.params['variables'];
saveconfig(config);
res.send(service.info());
});
restserver.get('/gameservers/:id/on', function on(req, res, next){service = servers[req.params.id]; service.turnon();res.send('ok')});
restserver.get('/gameservers/:id/off', function off(req, res, next){service = servers[req.params.id]; service.turnoff();res.send('ok')});
restserver.get('/gameservers/:id/restart', function restart(req, res, next){service = servers[req.params.id]; service.restart();res.send('ok')});
restserver.get('/gameservers/:id/configlist', function configlist(req, res, next){service = servers[req.params.id]; res.send(service.configlist());});
restserver.get('/gameservers/:id/maplist', function maplist(req, res, next){service = servers[req.params.id]; res.send(service.maplist());});
restserver.get('/gameservers/:id/query', function query(req, res, next){service = servers[req.params.id]; res.send(service.lastquery());});
restserver.post('/gameservers/:id/console', function command(req, res, next){service = servers[req.params.id]; service.send(req.params.command); res.send('ok');});
restserver.get('/gameservers/:id/addonsinstalled', function command(req, res, next){service = servers[req.params.id]; res.send(service.addonlist());});
restserver.get(/^\/gameservers\/(\d+)\/file\/(.+)/, function(req, res, next) {service = servers[req.params[0]];res.send({'contents':service.readfile(req.params[1])});});
restserver.put(/^\/gameservers\/(\d+)\/file\/(.+)/, function(req, res, next) {
if ('contents' in req.params){
service = servers[req.params[0]];res.send(service.writefile(req.params[1], req.params['contents']));
}
if ('url' in req.params){
service = servers[req.params[0]];res.send(service.downloadfile(req.params['url'], req.params[1]));
}
});
// TODO : put send
restserver.get('/gameservers/:id/gamemodes', function command(req, res, next){service = servers[req.params.id]; service.getgamemodes(res);});
restserver.put('/gameservers/:id/gamemodes', function command(req, res, next){service = servers[req.params.id]; service.installgamemode(req.params['gamemode']); res.send("ok");});
restserver.del('/gameservers/:id/gamemodes', function command(req, res, next){service = servers[req.params.id]; service.getgamemode(res);});
restserver.listen(config.daemon.listenport, function() {
console.log('%s listening at %s', restserver.name, restserver.url);
});