UNPKG

2.21 kBJavaScriptView Raw
1var common = require('@screeps/common'),
2 config = common.configManager.config;
3
4Object.assign(config.cli, {
5 greeting: 'Screeps server {build} running on port 21025.\r\nThis CLI interface contains a virtual JavaScript machine which you can use to invoke internal server commands. Any valid JavaScript code is allowed. Type "help()" to learn more about commands.\r\n',
6 connectionListener(socket) {
7
8 var connectionDesc = `${socket.remoteAddress}:${socket.remotePort}`;
9
10 console.log(`[${connectionDesc}] Incoming CLI connection`);
11
12 socket.on('error', error => console.log(`[${connectionDesc}] CLI connection reset`));
13 socket.on('end', () => console.log(`[${connectionDesc}] CLI connection closed`));
14
15 var runCliCommand = cliSandbox.create((data, isResult) => {
16 if(data === 'undefined') {
17 if(isResult) {
18 socket.write("< ", 'utf8');
19 }
20 return;
21 }
22 socket.write((isResult ? "< " : "") + data + "\r\n", 'utf8');
23 });
24
25 var buildString = '';
26 try {
27 buildString = `v${require('screeps').version} `;
28 }
29 catch(e) {}
30
31 socket.write(config.cli.greeting.replace('{build} ', buildString) + '< \r\n');
32
33 const rl = readline.createInterface({
34 input: socket,
35 output: socket
36 });
37
38 rl.on('line', line => runCliCommand(line));
39 }
40});
41
42var cliSandbox = require('./sandbox'),
43 q = require('q'),
44 _ = require('lodash'),
45 net = require('net'),
46 readline = require('readline');
47
48function startServer() {
49
50 if (!process.env.CLI_PORT) {
51 throw new Error('CLI_PORT environment variable is not set!');
52 }
53 if (!process.env.CLI_HOST) {
54 throw new Error('CLI_HOST environment variable is not set!');
55 }
56
57 console.log(`Starting CLI server`);
58
59 var server = net.createServer(config.cli.connectionListener);
60
61 server.on('listening', () => console.log(`CLI listening on ${process.env.CLI_HOST}:${process.env.CLI_PORT}`));
62
63 server.listen(process.env.CLI_PORT, process.env.CLI_HOST);
64
65 return server;
66}
67
68exports.startServer = startServer;
\No newline at end of file