|
|
@@ -0,0 +1,63 @@ |
|
|
|
var Game = require("../js/game.js"); |
|
|
|
|
|
|
|
var queues = { |
|
|
|
runners: [], |
|
|
|
gods: [] |
|
|
|
} |
|
|
|
|
|
|
|
var games = []; |
|
|
|
|
|
|
|
function cleanQueue(queue) { |
|
|
|
queue.forEach(function(elem, i) { |
|
|
|
if (elem.stale) |
|
|
|
queue.splice(i, 1); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function tryStartGame() { |
|
|
|
cleanQueue(queues.runners); |
|
|
|
cleanQueue(queues.gods); |
|
|
|
|
|
|
|
if (queues.runners.length === 0 || queues.gods.length === 0) |
|
|
|
return; |
|
|
|
|
|
|
|
var players = [queues.runners.shift(), queues.gods.shift()]; |
|
|
|
|
|
|
|
var game = new Game(players); |
|
|
|
players.forEach(function(p) { |
|
|
|
p.data.game = game; |
|
|
|
}); |
|
|
|
games.push(game); |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = function(args, req, sock) { |
|
|
|
if (args[1] === "start") { |
|
|
|
sock.data = { |
|
|
|
req: req, |
|
|
|
type: args[2], |
|
|
|
game: null, |
|
|
|
stale: false |
|
|
|
} |
|
|
|
|
|
|
|
if (args[2] === "runner") { |
|
|
|
queues.runners.push(sock); |
|
|
|
} else if (args[2] === "god") { |
|
|
|
queues.gods.push(sock); |
|
|
|
} else { |
|
|
|
return req.fail(); |
|
|
|
} |
|
|
|
|
|
|
|
sock.on("close", function() { |
|
|
|
sock.data.stale = true; |
|
|
|
}); |
|
|
|
|
|
|
|
tryStartGame(); |
|
|
|
|
|
|
|
return; |
|
|
|
} else { |
|
|
|
if (!sock.data.game) |
|
|
|
return req.error("Not in a game."); |
|
|
|
|
|
|
|
sock.data.game.message(args, req, sock); |
|
|
|
} |
|
|
|
} |