From 1a3c90165cb6bac4a2e57d9897d6829de0ccc6fc Mon Sep 17 00:00:00 2001 From: yo mama Date: Sat, 4 Apr 2015 01:13:50 -0700 Subject: first --- app.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 app.js (limited to 'app.js') diff --git a/app.js b/app.js new file mode 100644 index 0000000..cc9c6d7 --- /dev/null +++ b/app.js @@ -0,0 +1,80 @@ +/* -*- mode:javascript; coding:utf-8; -*- */ + +'use strict'; + +var PORT = 3000; +var REDISKEY_URL_QUEUE = 'url.queue'; +var REDISKEY_URL_SEQ = 'url.seq'; +var URL_QUEUE_MAXLEN = 10; + +var express = require('express'); +var routes = require('./routes'); + +var app = express(); +var redis = require('redis').createClient(); +var server = require('http').createServer(app); +var io = require('socket.io').listen(server); + +app.set('view engine', 'jade'); +app.set('views', __dirname + '/views'); + +app.engine('jade', require('jade').__express); + +//app.use(express.bodyParser()); +//app.use(express.methodOverride()); +app.use(app.router); +app.use(express.static(__dirname + '/public')); + +switch (app.get('env')) { +case 'development': + app.use(express.errorHandler({ + dumpExceptions: true, + showStack: true + })); + break; +case 'production': + app.use(express.errorHandler()); + break +} + +app.get('/', routes.index); +app.get('/chat', routes.chat); + +server.listen(PORT); + +io.sockets.on('connection', function (socket) { + socket.emit('message', { message: 'ready' }); + socket.on('send', function (data) { + var m = data.message.match(/(?:https?:\/\/)(?:[\da-z\.-]+)(?:\.(?:[a-z\.]{2,6}))?(?:\:\d+)?(?:[\/\w\.-]*)*\/?/ig); + + if (m) { + var length = m.length; + + redis.incrby(REDISKEY_URL_SEQ, length, function (e, v) { + var timestamp = Date.now(); + var xs = m.map(function (url, i) { + return JSON.stringify({ + seq: v - length + i + 1, + timestamp: timestamp, + url: url + }); + }); + + xs.unshift(REDISKEY_URL_QUEUE); + redis.send_command('rpush', xs); + redis.ltrim(REDISKEY_URL_QUEUE, -URL_QUEUE_MAXLEN, -1); + redis.lrange(REDISKEY_URL_QUEUE, -URL_QUEUE_MAXLEN, -1, function (e, queue) { + if (queue) { + data.queue = queue; + } + io.sockets.emit('message', data); + }); + }); + } + else { + io.sockets.emit('message', data); + } + }); +}); + +console.log("listening on port %d (env=%s)", server.address().port, app.settings.env); -- cgit v1.2.3-70-g09d2