1 |
3a515b92
|
cagy
|
var WebSocket = require('..'),
|
2 |
|
|
deflate = require('permessage-deflate'),
|
3 |
|
|
fs = require('fs'),
|
4 |
|
|
http = require('http'),
|
5 |
|
|
https = require('https');
|
6 |
|
|
|
7 |
|
|
var port = process.argv[2] || 7000,
|
8 |
|
|
secure = process.argv[3] === 'tls',
|
9 |
|
|
options = {extensions: [deflate], ping: 5};
|
10 |
|
|
|
11 |
|
|
var upgradeHandler = function(request, socket, head) {
|
12 |
|
|
var ws = new WebSocket(request, socket, head, ['irc', 'xmpp'], options);
|
13 |
|
|
console.log('[open]', ws.url, ws.version, ws.protocol, request.headers);
|
14 |
|
|
|
15 |
|
|
ws.pipe(ws);
|
16 |
|
|
|
17 |
|
|
ws.onclose = function(event) {
|
18 |
|
|
console.log('[close]', event.code, event.reason);
|
19 |
|
|
ws = null;
|
20 |
|
|
};
|
21 |
|
|
};
|
22 |
|
|
|
23 |
|
|
var requestHandler = function(request, response) {
|
24 |
|
|
if (!WebSocket.EventSource.isEventSource(request))
|
25 |
|
|
return staticHandler(request, response);
|
26 |
|
|
|
27 |
|
|
var es = new WebSocket.EventSource(request, response),
|
28 |
|
|
time = parseInt(es.lastEventId, 10) || 0;
|
29 |
|
|
|
30 |
|
|
console.log('[open]', es.url, es.lastEventId);
|
31 |
|
|
|
32 |
|
|
var loop = setInterval(function() {
|
33 |
|
|
time += 1;
|
34 |
|
|
es.send('Time: ' + time);
|
35 |
|
|
setTimeout(function() {
|
36 |
|
|
if (es) es.send('Update!!', {event: 'update', id: time});
|
37 |
|
|
}, 1000);
|
38 |
|
|
}, 2000);
|
39 |
|
|
|
40 |
|
|
fs.createReadStream(__dirname + '/haproxy.conf').pipe(es, {end: false});
|
41 |
|
|
|
42 |
|
|
es.onclose = function() {
|
43 |
|
|
clearInterval(loop);
|
44 |
|
|
console.log('[close]', es.url);
|
45 |
|
|
es = null;
|
46 |
|
|
};
|
47 |
|
|
};
|
48 |
|
|
|
49 |
|
|
var staticHandler = function(request, response) {
|
50 |
|
|
var path = request.url;
|
51 |
|
|
|
52 |
|
|
fs.readFile(__dirname + path, function(err, content) {
|
53 |
|
|
var status = err ? 404 : 200;
|
54 |
|
|
response.writeHead(status, {'Content-Type': 'text/html'});
|
55 |
|
|
response.write(content || 'Not found');
|
56 |
|
|
response.end();
|
57 |
|
|
});
|
58 |
|
|
};
|
59 |
|
|
|
60 |
|
|
var server = secure
|
61 |
|
|
? https.createServer({
|
62 |
|
|
key: fs.readFileSync(__dirname + '/../spec/server.key'),
|
63 |
|
|
cert: fs.readFileSync(__dirname + '/../spec/server.crt')
|
64 |
|
|
})
|
65 |
|
|
: http.createServer();
|
66 |
|
|
|
67 |
|
|
server.on('request', requestHandler);
|
68 |
|
|
server.on('upgrade', upgradeHandler);
|
69 |
|
|
server.listen(port);
|