summaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'app.js')
-rw-r--r--app.js80
1 files changed, 80 insertions, 0 deletions
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);