| Leo Repp | 58b9f11 | 2021-11-22 11:57:47 +0100 | [diff] [blame^] | 1 | 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); |