-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
86 lines (83 loc) · 2.68 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
//get socket with an id bridge.connected[x]
/***
REDIS
sudo service redis_6379 start
sudo service redis_6379 stop
***/
const express = require("express"),
socket = require("socket.io"),
http = require("http"),
_redis = require("redis"),
tictac = require("./tictactoe"),
app = express(),
server = http.createServer(app),
redis = _redis.createClient(),
io = socket.listen(server),
bridge = io.of("/bridge");
var sockArr = [];
var randomString = function (len, bits){
bits = bits || 36;
var outStr = "", newStr;
while (outStr.length < len){
newStr = Math.random().toString(bits).slice(2);
outStr += newStr.slice(0, Math.min(newStr.length, (len - outStr.length)));
}
return outStr.toUpperCase();
};
//app.set("view engine", "jade");
//app.set("view engine","html");
app.set("view options", {layout: false});
app.use(express.static("static"));
app.use(express.static("bower_components"));
app.get("/", function(req, res){
res.redirect("/game/test");
})
app.get("/game/:room", function(req, res){
if(req.params.room){
var redroom = req.params.room + "-players";
redis.zcard(redroom, function(err, result2){
if(err) res.send(502).end();
if(result2 <= 1)
res.sendfile("./static/game.html");
else
res.redirect("/bounce");
});
} else res.send(503);
});
app.get("/bounce", function(req, res){
res.send("ROOM FULL").end();
});
bridge.on('connection', function(s){
//console.log('someone connected');
s.on("join",function(data){
var room = data.room;
var redroom = room + "-players";
s.join(room);
s.emit("toClient", {message: "wait"});
redis.zcard(redroom, function(err, result) {
if(err) throw err;
if(result){
redis.zadd(redroom, "2", s.id);
s.emit("toClient", {message: "playerSet", playerSet: 2});
console.log("STARTING A GAME");
redis.zrangebyscore(redroom, "-inf","+inf", function(err, result){
if(err) throw err;
if(result) tictac(result, bridge, room, redis);
});
}
else{
redis.zadd(redroom, "1", s.id);
s.emit("toClient", {message: "playerSet", playerSet: 1});
}
});
});
s.on("disconnect", function(){
var room = s.rooms.pop();
s.leave(room);
s.broadcast.emit("toClient",{message: "playerLeft"});
redis.pexpire(room+"-players", "50");
}.bind(s));
});
server.listen(process.env.PORT, function() {
console.log("Ready");
});