| var WebSocket = require('..'), |
| deflate = require('permessage-deflate'), |
| fs = require('fs'), |
| http = require('http'), |
| https = require('https'); |
| |
| var port = process.argv[2] || 7000, |
| secure = process.argv[3] === 'tls', |
| options = {extensions: [deflate], ping: 5}; |
| |
| var upgradeHandler = function(request, socket, head) { |
| var ws = new WebSocket(request, socket, head, ['irc', 'xmpp'], options); |
| console.log('[open]', ws.url, ws.version, ws.protocol, request.headers); |
| |
| ws.pipe(ws); |
| |
| ws.onclose = function(event) { |
| console.log('[close]', event.code, event.reason); |
| ws = null; |
| }; |
| }; |
| |
| var requestHandler = function(request, response) { |
| if (!WebSocket.EventSource.isEventSource(request)) |
| return staticHandler(request, response); |
| |
| var es = new WebSocket.EventSource(request, response), |
| time = parseInt(es.lastEventId, 10) || 0; |
| |
| console.log('[open]', es.url, es.lastEventId); |
| |
| var loop = setInterval(function() { |
| time += 1; |
| es.send('Time: ' + time); |
| setTimeout(function() { |
| if (es) es.send('Update!!', {event: 'update', id: time}); |
| }, 1000); |
| }, 2000); |
| |
| fs.createReadStream(__dirname + '/haproxy.conf').pipe(es, {end: false}); |
| |
| es.onclose = function() { |
| clearInterval(loop); |
| console.log('[close]', es.url); |
| es = null; |
| }; |
| }; |
| |
| var staticHandler = function(request, response) { |
| var path = request.url; |
| |
| fs.readFile(__dirname + path, function(err, content) { |
| var status = err ? 404 : 200; |
| response.writeHead(status, {'Content-Type': 'text/html'}); |
| response.write(content || 'Not found'); |
| response.end(); |
| }); |
| }; |
| |
| var server = secure |
| ? https.createServer({ |
| key: fs.readFileSync(__dirname + '/../spec/server.key'), |
| cert: fs.readFileSync(__dirname + '/../spec/server.crt') |
| }) |
| : http.createServer(); |
| |
| server.on('request', requestHandler); |
| server.on('upgrade', upgradeHandler); |
| server.listen(port); |