-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathserver.js
More file actions
97 lines (75 loc) · 2.67 KB
/
Copy pathserver.js
File metadata and controls
97 lines (75 loc) · 2.67 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
var express = require('express'),
app = express(),
feeds = require('./lib/feed'),
sse = require('./lib/sse'),
peer_ips = [],
articles = [];
feeds.startUpdater()
feeds.on('article', function(article) {
articles.push(article);
if (articles.length > 5) {
articles.slice(0, 5)
}
});
app.get('/', function(req, res) {
res.sendfile('./web/app/index.html');
});
app.get('/web/*', function(req, res) {
path = req.params[0] ? req.params[0] : 'index.html';
res.sendfile('./web/app/' + path);
});
app.get('/stream/peers', function(req, res) {
var event = 'peers';
var peer_ip = req.connection.remoteAddress;
var peer_port = req.connection.remotePort;
if (req.headers['x-real-ip']) {
peer_ip = req.headers['x-real-ip'];
}else if( req.headers['x-forwarded-for']){
peer_ip = req.headers['x-forwarded-for'];
};
peer_ips.push([peer_ip, peer_port, req.headers['user-agent']]);
console.log('Added peer: ' + peer_ip + ':' + peer_port);
sse.writeSSEHead(req, res, function(req, res) {
sse.writeSSEData(req, res, event, peer_ips, function(req, res) {
interval = setInterval(function() {
sse.writeSSEData(req, res, event, peer_ips);
}, 1000);
req.connection.addListener("close", function() {
clearInterval(interval);
for (var peer in peer_ips) {
if (peer_ips[peer][0] === peer_ip && peer_ips[peer][1] === peer_port) {
peer_ips.splice(peer, 1);
console.log('Removed peer: ' + peer_ip + ':' + peer_port);
};
}
});
});
});
});
app.get('/stream/feed', function(req, res) {
var event = 'feed';
sse.writeSSEHead(req, res, function(req, res) {
sse.writeSSEData(req, res, event, articles[articles.length - 1], function(req, res) {
interval = setInterval(function() {
sse.writeSSEData(req, res, event, articles[articles.length - 1]);
}, 1000);
req.connection.addListener("close", function() {
clearInterval(interval);
});
})
});
});
app.get('/stream/date', function(req, res) {
var event = 'date';
sse.writeSSEHead(req, res, function(req, res) {
sse.writeSSEData(req, res, event, new Date(), function(req, res) {
intervalx = setInterval(function() {
sse.writeSSEData(req, res, event, new Date());
}, 1000);
req.connection.addListener("close", function() {
clearInterval(intervalx);
});
});
});
});
app.listen(process.env.PORT || 3000);