-
Notifications
You must be signed in to change notification settings - Fork 1
/
app.js
129 lines (104 loc) · 3.39 KB
/
app.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
var express = require('express');
var app = express();
//Set up net server for communication between web server and game server
var net = require('net');
var initial_board;
var current_state;
var writeAck;
var gameServer = net.createServer(function(conn) {
console.log("Server: Client connected");
// If connection is closed
conn.on("end", function() {
console.log('Server: Client disconnected');
// Close the server
});
// YEA RPC!!!
// Handle data from client
conn.on("data", function(data) {
data = JSON.parse(data);
//console.log(data.phase);
if (data.stats != null) {
console.log(data);
for (var c in clients) {
var remote = clients[c].remote;
remote.displayData(data);
}
} else if (data.phase == "ended") {
for (var c in clients) {
var remote = clients[c].remote;
initial_board = null;
current_state = null;
remote.restart();
}
} else {
if (initial_board == null) {
initial_board = data;
for (var c in clients) {
var remote = clients[c].remote;
remote.initBoard(data);
}
} else {
for (var c in clients) {
var remote = clients[c].remote;
current_state = data;
remote.redraw(data);
}
}
}
writeAck();
});
});
var gameServer2 = net.createServer(function(conn2) {
writeAck = function() {
conn2.write("ack");
}
});
// Listen for connections
gameServer.listen(31337, "localhost", function () {
console.log("Server: Listening");
});
gameServer2.listen(31338, "localhost", function() {
console.log("GameServer2: Listening");
});
var _ = require('lodash');
var Eureca = require('eureca.io');
var clients = {};
var eurecaServer = new Eureca.Server({ allow: ['setId', 'redraw', 'initBoard', 'restart', 'displayData']});
app.use(express.static(__dirname + '/public'));
app.use('/bootstrap', express.static(__dirname + '/node_modules/bootstrap/dist/'));
app.get('/', function(req, res) {
res.render('index.html');
});
app.set('port', (process.env.PORT || 3000));
var server = app.listen(app.get('port'), function() {
var host = server.address().address;
var port = server.address().port;
console.log('App listening at http://%s:%s', host, port);
});
//attache eureca.io to http server
eurecaServer.attach(server);
//detect client connection
eurecaServer.onConnect(function (conn) {
//console.log('New client id=%s', conn.id, conn.remoteAddress);
// The getClient method provide a proxy allowing us to call remote client functions
var remote = eurecaServer.getClient(conn.id);
// Register the client
clients[conn.id] = { id: conn.id, remote: remote };
remote.setId(conn.id);
if (initial_board != null) {
remote.initBoard(initial_board);
}
if (current_state != null) {
remote.redraw(current_state);
}
console.log(clients);
});
eurecaServer.exports.tryMove = function (move) {
console.log(move);
}
eurecaServer.onDisconnect(function (conn) {
console.log('Client disconnected ', conn.id);
});
eurecaServer.exports.hello = function () {
console.log('Hello from client');
}