Skip to content

Instantly share code, notes, and snippets.

@ggoodale
Created November 8, 2010 01:18
Show Gist options
  • Save ggoodale/667264 to your computer and use it in GitHub Desktop.
Save ggoodale/667264 to your computer and use it in GitHub Desktop.
3rd example for Deploy 2010
var net = require('net'),
_ = require('./underscore-min')._;
var connections = {};
var selectReceiver = function(sender) {
var eligibleReceivers = _.select(connections, function(conn) {
return (conn !== sender && !conn.gameData);
});
return eligibleReceivers[Math.floor(Math.random() * eligibleReceivers.length)];
};
var judgeGame = function(player, word) {
if (player.gameData == word.trim()) {
player.write("BINGO! Your score is now " + ++player.score + "!\n> ");
} else {
player.score = 0;
player.write("\nBUZZ! Your score is now zero.\n> ");
}
delete player.gameData;
clearTimeout(player.timerId);
};
var server = net.createServer(function(sock) {
sock.setTimeout(0);
sock.setEncoding("utf8");
sock.score = 0;
connections[sock.remotePort] = sock;
sock.on('data', function(data) {
if (this.gameData) {
judgeGame(this, data);
} else if (_.size(connections) > 1 && data.length > 1) {
var receiver = selectReceiver(sock);
receiver.gameData = data.slice(0,15).trim();
receiver.timerId = setTimeout(judgeGame, 5000, receiver, '');
receiver.write("\nType \"" + receiver.gameData + "\" - you have 5 seconds!\n> ");
this.write("Word sent!\n> ");
} else {
this.write("> ");
}
});
sock.on('close', function() {
delete connections[this.remotePort];
if (this.timerId) { clearTimeout(this.timerId); }
});
sock.write("Welcome to telephone! Send a player a word to type:\n> ");
});
server.listen(8124, "0.0.0.0");
console.log("Server started");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment