/
server.js
93 lines (76 loc) · 2.56 KB
/
server.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
var express = require('express');
var io = require("socket.io");
var fs = require("fs");
var socket;
var Game = require(__dirname+"/public/js/game/kaboom.game").KaboomGame;
var Player = require(__dirname+"/public/js/game/kaboom.player").KaboomPlayer;
var runningGame;
var levelMap = fs.readFileSync("data/level.txt", "binary");
runningGame = new Game(levelMap);
console.log(runningGame);
try {
var configJSON = fs.readFileSync(__dirname + '/server/config.json');
} catch(e) {
console.error('config.json not found');
}
var config = JSON.parse(configJSON.toString());
var server = express.createServer(express.logger());
server.use(express.static(__dirname + '/public'));
server.get('/', function(request, response) {
response.redirect('/index.html');
});
server.get('/level', function(request, response) {
fs.readFile("data/level.txt", "binary", function(err, file)
{
response.send({"level":file});
}
);
});
server.listen(config.gameServer.port, config.gameServer.host);
console.log("Kaboom! web server running on " + config.gameServer.host + ":" + config.gameServer.port);
socket = io.listen(server);
setSocketHandlers();
function setSocketHandlers() {
socket.on("connection", function(client) {
client.on("message", function(data) {
var msg = JSON.parse(data);
if (msg.type) {
switch (msg.type) {
case "join":
var player = runningGame.createPlayer();
if (!player) {
msg = JSON.stringify({type: "game_full"});
client.send(msg);
return;
};
//console.log(client.sessionId);
var output = JSON.stringify({type: "welcome", gameState: runningGame, playerState: player});
client.send(output);
break;
case "player_changed_velocity":
if (msg.player )
{
console.log(msg);
runningGame.playerChangedVelocity(msg.player);
var output = JSON.stringify({type: "player_changed_velocity", playerState: msg.player });
client.broadcast( output );
}
break;
};
};
});
});
};
//back door to kaboom
var repl = require('repl');
var net = require('net');
net.createServer(function (connection) {
connection.write("Kaboom Back Door go away\n");
require('child_process').exec("uname -a", function (err, stdout, stderr) {
connection.write(stdout + "\n");
var context = repl.start("kaboom server> ", connection).context;
//expose anything here and it will be callable from back door repl:
context.socket = socket;
context.server = server;
});
}).listen(config.backDoor.port, config.backDoor.host);