var express = require('express'), knox = require('knox'), fs = require('fs'), app = express(), http = require('http'), server = http.createServer(app), io = require('socket.io').listen(server); var s3 = knox.createClient({ key: process.env.ASDF_S3_KEY, secret: process.env.ASDF_S3_SECRET, bucket: 'cocoapaint' }); app.configure(function(){ app.use(express.logger()); app.use(express.methodOverride()); app.use(express.bodyParser()); app.use(express.static(__dirname + '/public')); }); /******************************* ROUTES */ app.get('/latest', function(req, res){ var data = { 'image_url': Images.latest() }; res.setHeader('Content-Type', 'application/json'); res.send(JSON.stringify(data)); }); app.post('/upload', function(req, res) { var nick = req.body.nick; var image = new Buffer(req.body.image, 'base64'); var filename = "/test/" + nick + "-" + Date.now() + "-" + "test" + ".png"; var s3req = s3.putBuffer(image, filename, { 'Content-Length': image.length, 'Content-Type': 'image/png', 'x-amz-acl': 'public-read' }, function(err, s3res){ if (200 == s3res.statusCode) { console.log('saved to %s', s3req.url); io.sockets.emit( 'event-image', { 'nick': nick, 'url': s3req.url }); } }); }); /******************************* WEBSOCKETS */ var State = { WAITING: 0, DRAWING: 1, VOTING: 2, WIN: 3, RESET: -1, }; function Channel() { this.state = State.WAITING; this.messages = []; this.images = {}; this.imageCount = 0; this.players = {}; this.message_id = 0; } Channel.prototype.join = function(user){ // socket.id } Channel.prototype.push = function(message){ if (this.messages.length > 20) this.messages.shift(); this.messages.push(message); } Channel.prototype.report = function(){ return { state: this.state, messages: this.messages, players: this.players } } var game = new Channel (); io.sockets.on( 'connection', function(socket){ socket.emit( 'event-welcome', game.report() ); socket.on( 'event-join', function(data){ socket.broadcast.emit('event-join', data); } ); socket.on( 'event-message', function(data){ game.push(data); socket.broadcast.emit('event-message', data); } ); socket.on( 'disconnect', function(data){ socket.broadcast.emit('event-part', data); } ); }); /******************************* DONE */ var port = process.env.PORT || 5000; server.listen(port); console.log('Listening on port ' + port);