Projekt

Obecné

Profil

Stáhnout (1.94 KB) Statistiky
| Větev: | Revize:
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);
(5-5/7)