blob: c2cfa32597c6bf114afed0cc0384c47998e4110a [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001var WebSocket = require('..'),
2 deflate = require('permessage-deflate'),
3 fs = require('fs'),
4 http = require('http'),
5 https = require('https');
6
7var port = process.argv[2] || 7000,
8 secure = process.argv[3] === 'tls',
9 options = {extensions: [deflate], ping: 5};
10
11var 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
23var 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
49var 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
60var 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
67server.on('request', requestHandler);
68server.on('upgrade', upgradeHandler);
69server.listen(port);