Initial commit
[yaffs-website] / node_modules / faye-websocket / examples / server.js
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);