[6a3a178] | 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;
|
---|