diff options
| author | yo mama <pepper@scannerjammer.com> | 2015-04-04 01:13:50 -0700 |
|---|---|---|
| committer | yo mama <pepper@scannerjammer.com> | 2015-04-04 01:13:50 -0700 |
| commit | 1a3c90165cb6bac4a2e57d9897d6829de0ccc6fc (patch) | |
| tree | 604f4b5b02b1e24c7c5aad5c4560b0cf53cf9289 /app.js | |
Diffstat (limited to 'app.js')
| -rw-r--r-- | app.js | 80 |
1 files changed, 80 insertions, 0 deletions
@@ -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); |
