| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 | // Generated by CoffeeScript 1.6.3/*   Stomp Over WebSocket http://www.jmesnil.net/stomp-websocket/doc/ | Apache License V2.0*/(function() {  var Byte, Client, Frame, Stomp,    __hasProp = {}.hasOwnProperty;  Byte = {    LF: '\x0A',    NULL: '\x00'  };  Frame = (function() {    function Frame(command, headers, body) {      this.command = command;      this.headers = headers != null ? headers : {};      this.body = body != null ? body : '';    }    Frame.prototype.toString = function() {      var lines, name, value, _ref;      lines = [this.command];      _ref = this.headers;      for (name in _ref) {        if (!__hasProp.call(_ref, name)) continue;        value = _ref[name];        lines.push("" + name + ":" + value);      }      if (this.body) {        lines.push("content-length:" + ('' + this.body).length);      }      lines.push(Byte.LF + this.body);      return lines.join(Byte.LF);    };    Frame._unmarshallSingle = function(data) {      var body, chr, command, divider, headerLines, headers, i, idx, len, line, start, trim, _i, _j, _ref, _ref1;      divider = data.search(RegExp("" + Byte.LF + Byte.LF));      headerLines = data.substring(0, divider).split(Byte.LF);      command = headerLines.shift();      headers = {};      trim = function(str) {        return str.replace(/^\s+|\s+$/g, '');      };      line = idx = null;      for (i = _i = 0, _ref = headerLines.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {        line = headerLines[i];        idx = line.indexOf(':');        headers[trim(line.substring(0, idx))] = trim(line.substring(idx + 1));      }      body = '';      start = divider + 2;      if (headers['content-length']) {        len = parseInt(headers['content-length']);        body = ('' + data).substring(start, start + len);      } else {        chr = null;        for (i = _j = start, _ref1 = data.length; start <= _ref1 ? _j < _ref1 : _j > _ref1; i = start <= _ref1 ? ++_j : --_j) {          chr = data.charAt(i);          if (chr === Byte.NULL) {            break;          }          body += chr;        }      }      return new Frame(command, headers, body);    };    Frame.unmarshall = function(datas) {      var data;      return (function() {        var _i, _len, _ref, _results;        _ref = datas.split(RegExp("" + Byte.NULL + Byte.LF + "*"));        _results = [];        for (_i = 0, _len = _ref.length; _i < _len; _i++) {          data = _ref[_i];          if ((data != null ? data.length : void 0) > 0) {            _results.push(Frame._unmarshallSingle(data));          }        }        return _results;      })();    };    Frame.marshall = function(command, headers, body) {      var frame;      frame = new Frame(command, headers, body);      return frame.toString() + Byte.NULL;    };    return Frame;  })();  Client = (function() {    function Client(ws) {      this.ws = ws;      this.ws.binaryType = "arraybuffer";      this.counter = 0;      this.connected = false;      this.heartbeat = {        outgoing: 10000,        incoming: 10000      };      this.maxWebSocketFrameSize = 16 * 1024;      this.subscriptions = {};    }    Client.prototype.debug = function(message) {      var _ref;      return typeof window !== "undefined" && window !== null ? (_ref = window.console) != null ? _ref.log(message) : void 0 : void 0;    };    Client.prototype._transmit = function(command, headers, body) {      var out;      out = Frame.marshall(command, headers, body);      if (typeof this.debug === "function") {        this.debug(">>> " + out);      }      while (true) {        if (out.length > this.maxWebSocketFrameSize) {          this.ws.send(out.substring(0, this.maxWebSocketFrameSize));          out = out.substring(this.maxWebSocketFrameSize);          if (typeof this.debug === "function") {            this.debug("remaining = " + out.length);          }        } else {          return this.ws.send(out);        }      }    };    Client.prototype._setupHeartbeat = function(headers) {      var serverIncoming, serverOutgoing, ttl, v, _ref, _ref1,        _this = this;      if ((_ref = headers.version) !== Stomp.VERSIONS.V1_1 && _ref !== Stomp.VERSIONS.V1_2) {        return;      }      _ref1 = (function() {        var _i, _len, _ref1, _results;        _ref1 = headers['heart-beat'].split(",");        _results = [];        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {          v = _ref1[_i];          _results.push(parseInt(v));        }        return _results;      })(), serverOutgoing = _ref1[0], serverIncoming = _ref1[1];      if (!(this.heartbeat.outgoing === 0 || serverIncoming === 0)) {        ttl = Math.max(this.heartbeat.outgoing, serverIncoming);        if (typeof this.debug === "function") {          this.debug("send PING every " + ttl + "ms");        }        this.pinger = typeof window !== "undefined" && window !== null ? window.setInterval(function() {          _this.ws.send(Byte.LF);          return typeof _this.debug === "function" ? _this.debug(">>> PING") : void 0;        }, ttl) : void 0;      }      if (!(this.heartbeat.incoming === 0 || serverOutgoing === 0)) {        ttl = Math.max(this.heartbeat.incoming, serverOutgoing);        if (typeof this.debug === "function") {          this.debug("check PONG every " + ttl + "ms");        }        return this.ponger = typeof window !== "undefined" && window !== null ? window.setInterval(function() {          var delta;          delta = Date.now() - _this.serverActivity;          if (delta > ttl * 2) {            if (typeof _this.debug === "function") {              _this.debug("did not receive server activity for the last " + delta + "ms");            }            return _this.ws.close();          }        }, ttl) : void 0;      }    };    Client.prototype.connect = function(login, passcode, connectCallback, errorCallback, vhost) {      var _this = this;      this.connectCallback = connectCallback;      if (typeof this.debug === "function") {        this.debug("Opening Web Socket...");      }      this.ws.onmessage = function(evt) {        var arr, c, data, frame, onreceive, _i, _len, _ref, _results;        data = typeof ArrayBuffer !== 'undefined' && evt.data instanceof ArrayBuffer ? (arr = new Uint8Array(evt.data), typeof _this.debug === "function" ? _this.debug("--- got data length: " + arr.length) : void 0, ((function() {          var _i, _len, _results;          _results = [];          for (_i = 0, _len = arr.length; _i < _len; _i++) {            c = arr[_i];            _results.push(String.fromCharCode(c));          }          return _results;        })()).join('')) : evt.data;        _this.serverActivity = Date.now();        if (data === Byte.LF) {          if (typeof _this.debug === "function") {            _this.debug("<<< PONG");          }          return;        }        if (typeof _this.debug === "function") {          _this.debug("<<< " + data);        }        _ref = Frame.unmarshall(data);        _results = [];        for (_i = 0, _len = _ref.length; _i < _len; _i++) {          frame = _ref[_i];          switch (frame.command) {            case "CONNECTED":              if (typeof _this.debug === "function") {                _this.debug("connected to server " + frame.headers.server);              }              _this.connected = true;              _this._setupHeartbeat(frame.headers);              _results.push(typeof _this.connectCallback === "function" ? _this.connectCallback(frame) : void 0);              break;            case "MESSAGE":              onreceive = _this.subscriptions[frame.headers.subscription] || _this.onreceive;              if (onreceive) {                _results.push(onreceive(frame));              } else {                _results.push(typeof _this.debug === "function" ? _this.debug("Unhandled received MESSAGE: " + frame) : void 0);              }              break;            case "RECEIPT":              _results.push(typeof _this.onreceipt === "function" ? _this.onreceipt(frame) : void 0);              break;            case "ERROR":              _results.push(typeof errorCallback === "function" ? errorCallback(frame) : void 0);              break;            default:              _results.push(typeof _this.debug === "function" ? _this.debug("Unhandled frame: " + frame) : void 0);          }        }        return _results;      };      this.ws.onclose = function() {        var msg;        msg = "Whoops! Lost connection to " + _this.ws.url;        if (typeof _this.debug === "function") {          _this.debug(msg);        }        _this._cleanUp();        return typeof errorCallback === "function" ? errorCallback(msg) : void 0;      };      return this.ws.onopen = function() {        var headers;        if (typeof _this.debug === "function") {          _this.debug('Web Socket Opened...');        }        headers = {          "accept-version": Stomp.VERSIONS.supportedVersions(),          "heart-beat": [_this.heartbeat.outgoing, _this.heartbeat.incoming].join(',')        };        if (vhost) {          headers.host = vhost;        }        if (login) {          headers.login = login;        }        if (passcode) {          headers.passcode = passcode;        }        return _this._transmit("CONNECT", headers);      };    };    Client.prototype.disconnect = function(disconnectCallback) {      this._transmit("DISCONNECT");      this.ws.onclose = null;      this.ws.close();      this._cleanUp();      return typeof disconnectCallback === "function" ? disconnectCallback() : void 0;    };    Client.prototype._cleanUp = function() {      this.connected = false;      if (this.pinger) {        if (typeof window !== "undefined" && window !== null) {          window.clearInterval(this.pinger);        }      }      if (this.ponger) {        return typeof window !== "undefined" && window !== null ? window.clearInterval(this.ponger) : void 0;      }    };    Client.prototype.send = function(destination, headers, body) {      if (headers == null) {        headers = {};      }      if (body == null) {        body = '';      }      headers.destination = destination;      return this._transmit("SEND", headers, body);    };    Client.prototype.subscribe = function(destination, callback, headers) {      if (headers == null) {        headers = {};      }      if (!headers.id) {        headers.id = "sub-" + this.counter++;      }      headers.destination = destination;      this.subscriptions[headers.id] = callback;      this._transmit("SUBSCRIBE", headers);      return headers.id;    };    Client.prototype.unsubscribe = function(id) {      delete this.subscriptions[id];      return this._transmit("UNSUBSCRIBE", {        id: id      });    };    Client.prototype.begin = function(transaction) {      return this._transmit("BEGIN", {        transaction: transaction      });    };    Client.prototype.commit = function(transaction) {      return this._transmit("COMMIT", {        transaction: transaction      });    };    Client.prototype.abort = function(transaction) {      return this._transmit("ABORT", {        transaction: transaction      });    };    Client.prototype.ack = function(messageID, subscription, headers) {      if (headers == null) {        headers = {};      }      headers["message-id"] = messageID;      headers.subscription = subscription;      return this._transmit("ACK", headers);    };    Client.prototype.nack = function(messageID, subscription, headers) {      if (headers == null) {        headers = {};      }      headers["message-id"] = messageID;      headers.subscription = subscription;      return this._transmit("NACK", headers);    };    return Client;  })();  Stomp = {    libVersion: "2.0.0-next",    VERSIONS: {      V1_0: '1.0',      V1_1: '1.1',      V1_2: '1.2',      supportedVersions: function() {        return '1.1,1.0';      }    },    client: function(url, protocols) {      var klass, ws;      if (protocols == null) {        protocols = ['v10.stomp', 'v11.stomp'];      }      klass = Stomp.WebSocketClass || WebSocket;      ws = new klass(url, protocols);      return new Client(ws);    },    over: function(ws) {      return new Client(ws);    },    Frame: Frame  };  if (typeof window !== "undefined" && window !== null) {    window.Stomp = Stomp;  } else if (typeof exports !== "undefined" && exports !== null) {    exports.Stomp = Stomp;    Stomp.WebSocketClass = require('./test/server.mock.js').StompServerMock;  } else {    self.Stomp = Stomp;  }}).call(this);
 |