Projekt

Obecné

Profil

Stáhnout (1.48 KB) Statistiky
| Větev: | Revize:
1
'use strict';
2

    
3
var EventEmitter = require('events').EventEmitter
4
  , inherits = require('inherits')
5
  , JSON3 = require('json3')
6
  , utils = require('./utils/event')
7
  , IframeTransport = require('./transport/iframe')
8
  , InfoReceiverIframe = require('./info-iframe-receiver')
9
  ;
10

    
11
var debug = function() {};
12
if (process.env.NODE_ENV !== 'production') {
13
  debug = require('debug')('sockjs-client:info-iframe');
14
}
15

    
16
function InfoIframe(baseUrl, url) {
17
  var self = this;
18
  EventEmitter.call(this);
19

    
20
  var go = function() {
21
    var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);
22

    
23
    ifr.once('message', function(msg) {
24
      if (msg) {
25
        var d;
26
        try {
27
          d = JSON3.parse(msg);
28
        } catch (e) {
29
          debug('bad json', msg);
30
          self.emit('finish');
31
          self.close();
32
          return;
33
        }
34

    
35
        var info = d[0], rtt = d[1];
36
        self.emit('finish', info, rtt);
37
      }
38
      self.close();
39
    });
40

    
41
    ifr.once('close', function() {
42
      self.emit('finish');
43
      self.close();
44
    });
45
  };
46

    
47
  // TODO this seems the same as the 'needBody' from transports
48
  if (!global.document.body) {
49
    utils.attachEvent('load', go);
50
  } else {
51
    go();
52
  }
53
}
54

    
55
inherits(InfoIframe, EventEmitter);
56

    
57
InfoIframe.enabled = function() {
58
  return IframeTransport.enabled();
59
};
60

    
61
InfoIframe.prototype.close = function() {
62
  if (this.ifr) {
63
    this.ifr.close();
64
  }
65
  this.removeAllListeners();
66
  this.ifr = null;
67
};
68

    
69
module.exports = InfoIframe;
(6-6/12)