-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpallo.js
More file actions
119 lines (106 loc) · 3.79 KB
/
Copy pathpallo.js
File metadata and controls
119 lines (106 loc) · 3.79 KB
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
var handler = function(req, res) {
var mime = require('mime');
var uri = require('url').parse(req.url).pathname;
var filename = require('path').join(process.cwd(), uri);
if (uri == '/') {
filename = "./pallo.html"
}
fs.readFile(filename, function (err, data) {
if(err) {
if (err.code == 'ENOENT') {
res.writeHead(404, {"Content-Type": "text/plain"});
res.write("404 Not Found\n")
}
else {
res.writeHead(500, {"Content-Type": "text/plain"});
res.write(err + "\n");
}
res.end();
return;
}
res.setHeader("Content-Type", mime.lookup(filename));
res.writeHead(200);
res.end(data);
});
};
gameBoard = [ 0, 0, 0, 0, 0 ];
users = [
{color: "white", count: 0, taken: true, name: ""},
{color: "red", count: 0, taken: false, name: ""},
{color: "blue", count: 0, taken: false, name: ""},
{color: "yellow", count: 0, taken: false, name: ""},
{color: "green", count: 0, taken: false, name: ""}
];
var server = require('http').createServer(handler);
var io = require('socket.io').listen(server);
var fs = require('fs');
var port = process.env.PORT || 80;
server.listen(port);
io.sockets.on('connection', function (socket) {
// Find the first available color
var userId;
for (i = 1; i < users.length; i++) {
if (!users[i].taken) {
users[i].taken = true;
userId = i;
break;
}
}
socket.emit("set user", userId);
socket.emit("update", { circle: 'circle0', color: users[gameBoard[0]].color });
socket.emit("update", { circle: 'circle1', color: users[gameBoard[1]].color });
socket.emit("update", { circle: 'circle2', color: users[gameBoard[2]].color });
socket.emit("update", { circle: 'circle3', color: users[gameBoard[3]].color });
socket.emit("update", { circle: 'circle4', color: users[gameBoard[4]].color });
socket.on("circle click", function(userId, circle) {
updateColor(circle, userId);
});
socket.on("disconnect", function() {
removeUser(userId);
io.sockets.emit("print user names", users);
});
socket.on("get users", function() {
socket.emit("update users", { users: users });
});
socket.on("set user name", function(userId, userName) {
if (userName === "") {
userName = "User" + userId
}
users[userId].name = userName;
io.sockets.emit("print user names", users);
});
});
var updateColor = function(circle, userId) {
circleID = "circle" + circle;
var newColor = userId;
if (gameBoard[circle] == 0) {
users[userId].count++
}
else if ( gameBoard[circle] != userId) {
newColor = 0;
users[gameBoard[circle]].count--
}
io.sockets.emit("update", { circle: circleID, color: users[newColor].color });
gameBoard[circle] = newColor;
if (users[userId].count === 3) {
io.sockets.emit("win", { user: users[userId].name });
clearBoard();
}
}
var clearBoard = function() {
for (i = 0; i < gameBoard.length; i++) {
gameBoard[i] = 0;
}
for (i = 0; i < users.length; i++) {
users[i].count = 0;
}
io.sockets.emit("update", { circle: 'circle0', color: users[gameBoard[0]].color });
io.sockets.emit("update", { circle: 'circle1', color: users[gameBoard[1]].color });
io.sockets.emit("update", { circle: 'circle2', color: users[gameBoard[2]].color });
io.sockets.emit("update", { circle: 'circle3', color: users[gameBoard[3]].color });
io.sockets.emit("update", { circle: 'circle4', color: users[gameBoard[4]].color });
}
var removeUser = function (userId) {
users[userId].taken = false;
users[userId].name = "";
}