Created
November 8, 2010 01:18
-
-
Save ggoodale/667264 to your computer and use it in GitHub Desktop.
3rd example for Deploy 2010
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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