123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- var express = require('express')
- , path = require('path')
- , crypto = require('crypto')
- , http = require('http');
- var app = express();
- app.configure(function() {
- app.set('port', process.env.PORT || 3000);
- app.set('views', __dirname + '/views');
- app.set('view engine', 'jade');
- app.use(express.favicon());
- app.use(express.logger('dev'));
- app.use(express.bodyParser());
- app.use(express.methodOverride());
- app.use(express.cookieParser('45710b553b5b7293753d03bd3601f70a'));
- app.use(express.session());
- app.use(app.router);
- app.use(express.static(path.join(__dirname, 'public')));
- });
- app.configure('development', function() {
- app.use(express.errorHandler());
- });
- app.get('/', function(req, res) {
- res.render('index');
- });
- app.get('/about', function(req, res) {
- res.render('about');
- });
- app.get('/play/:token', function(req, res) {
- res.render('play', {
- 'token': req.params.token
- });
- });
- var server = http.createServer(app).listen(app.get('port'), function() {
- console.log("Express server listening on port " + app.get('port'));
- });
- var games = {};
- /**
- * Sockets
- */
- var io = require('socket.io').listen(server, {log: false});
- io.sockets.on('connection', function (socket) {
- socket.on('start', function (data) {
- var token;
- var b = new Buffer(Math.random() + new Date().getTime() + socket.id);
- token = b.toString('base64').slice(12, 32);
- games[token] = {
- 'creator': socket,
- 'players': []
- };
- socket.emit('created', {
- 'token': token
- });
- });
- socket.on('join', function (data) {
- var game, color;
- if (!(data.token in games)) {
- return;
- }
- game = games[data.token];
- if (game.players.length > 2) {
- socket.emit('full');
- return;
- } else if (game.players.length == 1) {
- if (game.players[0].color == 'black') {
- color = 'white';
- } else {
- color = 'black';
- }
- } else {
- var colors = ['black', 'white'];
- color = colors[Math.floor(Math.random() * 2)];
- }
- games[data.token].players.push({
- 'id': socket.id,
- 'socket': socket,
- 'color': color
- });
- game.creator.emit('ready', {});
- socket.emit('joined', {
- 'color': color
- });
- });
- socket.on('new-move', function (data) {
- var receiver, game;
- if (!(data.token in games)) {
- return;
- }
- game = games[data.token];
- if (game.players[0].id == socket.id) {
- receiver = game.players[1].socket;
- } else if (game.players[1].id == socket.id) {
- receiver = game.players[0].socket;
- } else {
- return;
- }
- receiver.emit('move', {
- 'move': data.move,
- });
- });
- socket.on('disconnect', function () {
- for (token in games) {
- var game = games[token];
- for (j in game.players) {
- var player = game.players[j];
- if (player.socket == socket) {
- var opponent = game.players[Math.abs(j - 1)];
- delete games[token];
- opponent.socket.emit('opponent-disconnected');
- }
- }
- }
- });
- });
|