-
Notifications
You must be signed in to change notification settings - Fork 35
/
app.js
77 lines (62 loc) · 2.42 KB
/
app.js
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
/**
* Module dependencies.
*/
var express = require('express'),
socketio = require('socket.io'),
subscribe = require('./lib/subscriber.js').subscribe;
feeds = require('./config/feeds.js').feeds;
var app = module.exports = express.createServer();
var io = socketio.listen(app);
// For now at least, heroku doesn't support websockets :(
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', require('./routes/index.js').index);
app.get('/:id/atom', require('./routes/atom.js').atom); // Serves the agregated feed as Atom
app.get('/:id/json', require('./routes/json.js').json); // Serves the agregated feed as json. Supports the optional jsonp argument
app.get('/:id', require('./routes/html.js').html); // Serves the agregated feed as html.
app.get('/feed/:id/:feedId', require('./routes/verification.js').verification); // PubSubhubbub verification mechanism
app.post('/feed/:id/:feedId', require('./routes/notification.js').notification); // PubSubHubbub notification mechanism
// Socket.io
io.sockets.on('connection', function (socket) {
var notif = function(obj) {
socket.emit('notification', obj);
}
process.on('notification', notif);
socket.on('disconnect', function () {
process.removeListener('notification', notif);
});
});
app.listen(process.env.PORT);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
// When starting, we need to subscribe to all the feeds in the configuration.
for (var i in feeds) {
for(var j = 0; j < feeds[i].sources.length; j++) {
var url = feeds[i].sources[j];
subscribe(url, i, feeds[i], function(err, url) {
if(err) {
console.error(err);
}
else {
console.log("Subscribed to", url);
}
});
}
}