summaryrefslogtreecommitdiff
path: root/app.js
blob: cc9c6d7aee20f7122dc1c52ddb65185f60a16b41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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);