You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
466 lines
11 KiB
466 lines
11 KiB
5 years ago
|
// Generated by CoffeeScript 1.7.1
|
||
|
/*
|
||
|
Stomp Over WebSocket http://www.jmesnil.net/stomp-websocket/doc/ | Apache License V2.0
|
||
|
|
||
|
Copyright (C) 2010-2013 [Jeff Mesnil](http://jmesnil.net/)
|
||
|
Copyright (C) 2012 [FuseSource, Inc.](http://fusesource.com)
|
||
|
*/
|
||
|
(function() {
|
||
|
var t, e, n, i, r = {}.hasOwnProperty,
|
||
|
o = [].slice;
|
||
|
t = {
|
||
|
LF: "\n",
|
||
|
NULL: "\x00"
|
||
|
};
|
||
|
n = function() {
|
||
|
var e;
|
||
|
|
||
|
function n(t, e, n) {
|
||
|
this.command = t;
|
||
|
this.headers = e != null ? e : {};
|
||
|
this.body = n != null ? n : ""
|
||
|
}
|
||
|
n.prototype.toString = function() {
|
||
|
var e, i, o, s, u;
|
||
|
e = [this.command];
|
||
|
o = this.headers["content-length"] === false ? true : false;
|
||
|
if(o) {
|
||
|
delete this.headers["content-length"]
|
||
|
}
|
||
|
u = this.headers;
|
||
|
for(i in u) {
|
||
|
if(!r.call(u, i)) continue;
|
||
|
s = u[i];
|
||
|
e.push("" + i + ":" + s)
|
||
|
}
|
||
|
if(this.body && !o) {
|
||
|
e.push("content-length:" + n.sizeOfUTF8(this.body))
|
||
|
}
|
||
|
e.push(t.LF + this.body);
|
||
|
return e.join(t.LF)
|
||
|
};
|
||
|
n.sizeOfUTF8 = function(t) {
|
||
|
if(t) {
|
||
|
return encodeURI(t).match(/%..|./g).length
|
||
|
} else {
|
||
|
return 0
|
||
|
}
|
||
|
};
|
||
|
e = function(e) {
|
||
|
var i, r, o, s, u, a, c, f, h, l, p, d, g, b, m, v, y;
|
||
|
s = e.search(RegExp("" + t.LF + t.LF));
|
||
|
u = e.substring(0, s).split(t.LF);
|
||
|
o = u.shift();
|
||
|
a = {};
|
||
|
d = function(t) {
|
||
|
return t.replace(/^\s+|\s+$/g, "")
|
||
|
};
|
||
|
v = u.reverse();
|
||
|
for(g = 0, m = v.length; g < m; g++) {
|
||
|
l = v[g];
|
||
|
f = l.indexOf(":");
|
||
|
a[d(l.substring(0, f))] = d(l.substring(f + 1))
|
||
|
}
|
||
|
i = "";
|
||
|
p = s + 2;
|
||
|
if(a["content-length"]) {
|
||
|
h = parseInt(a["content-length"]);
|
||
|
i = ("" + e).substring(p, p + h)
|
||
|
} else {
|
||
|
r = null;
|
||
|
for(c = b = p, y = e.length; p <= y ? b < y : b > y; c = p <= y ? ++b : --b) {
|
||
|
r = e.charAt(c);
|
||
|
if(r === t.NULL) {
|
||
|
break
|
||
|
}
|
||
|
i += r
|
||
|
}
|
||
|
}
|
||
|
return new n(o, a, i)
|
||
|
};
|
||
|
n.unmarshall = function(n) {
|
||
|
var i, r, o, s;
|
||
|
r = n.split(RegExp("" + t.NULL + t.LF + "*"));
|
||
|
s = {
|
||
|
frames: [],
|
||
|
partial: ""
|
||
|
};
|
||
|
s.frames = function() {
|
||
|
var t, n, o, s;
|
||
|
o = r.slice(0, -1);
|
||
|
s = [];
|
||
|
for(t = 0, n = o.length; t < n; t++) {
|
||
|
i = o[t];
|
||
|
s.push(e(i))
|
||
|
}
|
||
|
return s
|
||
|
}();
|
||
|
o = r.slice(-1)[0];
|
||
|
if(o === t.LF || o.search(RegExp("" + t.NULL + t.LF + "*$")) !== -1) {
|
||
|
s.frames.push(e(o))
|
||
|
} else {
|
||
|
s.partial = o
|
||
|
}
|
||
|
return s
|
||
|
};
|
||
|
n.marshall = function(e, i, r) {
|
||
|
var o;
|
||
|
o = new n(e, i, r);
|
||
|
return o.toString() + t.NULL
|
||
|
};
|
||
|
return n
|
||
|
}();
|
||
|
e = function() {
|
||
|
var e;
|
||
|
|
||
|
function r(t) {
|
||
|
this.ws = t;
|
||
|
this.ws.binaryType = "arraybuffer";
|
||
|
this.counter = 0;
|
||
|
this.connected = false;
|
||
|
this.heartbeat = {
|
||
|
outgoing: 1e4,
|
||
|
incoming: 1e4
|
||
|
};
|
||
|
this.maxWebSocketFrameSize = 16 * 1024;
|
||
|
this.subscriptions = {};
|
||
|
this.partialData = ""
|
||
|
}
|
||
|
r.prototype.debug = function(t) {
|
||
|
var e;
|
||
|
return typeof window !== "undefined" && window !== null ? (e = window.console) != null ? e.log(t) : void 0 : void 0
|
||
|
};
|
||
|
e = function() {
|
||
|
if(Date.now) {
|
||
|
return Date.now()
|
||
|
} else {
|
||
|
return(new Date).valueOf
|
||
|
}
|
||
|
};
|
||
|
r.prototype._transmit = function(t, e, i) {
|
||
|
var r;
|
||
|
r = n.marshall(t, e, i);
|
||
|
if(typeof this.debug === "function") {
|
||
|
this.debug(">>> " + r)
|
||
|
}
|
||
|
while(true) {
|
||
|
if(r.length > this.maxWebSocketFrameSize) {
|
||
|
this.ws.send(r.substring(0, this.maxWebSocketFrameSize));
|
||
|
r = r.substring(this.maxWebSocketFrameSize);
|
||
|
if(typeof this.debug === "function") {
|
||
|
this.debug("remaining = " + r.length)
|
||
|
}
|
||
|
} else {
|
||
|
return this.ws.send(r)
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
r.prototype._setupHeartbeat = function(n) {
|
||
|
var r, o, s, u, a, c;
|
||
|
if((a = n.version) !== i.VERSIONS.V1_1 && a !== i.VERSIONS.V1_2) {
|
||
|
return
|
||
|
}
|
||
|
c = function() {
|
||
|
var t, e, i, r;
|
||
|
i = n["heart-beat"].split(",");
|
||
|
r = [];
|
||
|
for(t = 0, e = i.length; t < e; t++) {
|
||
|
u = i[t];
|
||
|
r.push(parseInt(u))
|
||
|
}
|
||
|
return r
|
||
|
}(), o = c[0], r = c[1];
|
||
|
if(!(this.heartbeat.outgoing === 0 || r === 0)) {
|
||
|
s = Math.max(this.heartbeat.outgoing, r);
|
||
|
if(typeof this.debug === "function") {
|
||
|
this.debug("send PING every " + s + "ms")
|
||
|
}
|
||
|
this.pinger = i.setInterval(s, function(e) {
|
||
|
return function() {
|
||
|
e.ws.send(t.LF);
|
||
|
return typeof e.debug === "function" ? e.debug(">>> PING") : void 0
|
||
|
}
|
||
|
}(this))
|
||
|
}
|
||
|
if(!(this.heartbeat.incoming === 0 || o === 0)) {
|
||
|
s = Math.max(this.heartbeat.incoming, o);
|
||
|
if(typeof this.debug === "function") {
|
||
|
this.debug("check PONG every " + s + "ms")
|
||
|
}
|
||
|
return this.ponger = i.setInterval(s, function(t) {
|
||
|
return function() {
|
||
|
var n;
|
||
|
n = e() - t.serverActivity;
|
||
|
if(n > s * 2) {
|
||
|
if(typeof t.debug === "function") {
|
||
|
t.debug("did not receive server activity for the last " + n + "ms")
|
||
|
}
|
||
|
return t.ws.close()
|
||
|
}
|
||
|
}
|
||
|
}(this))
|
||
|
}
|
||
|
};
|
||
|
r.prototype._parseConnect = function() {
|
||
|
var t, e, n, i;
|
||
|
t = 1 <= arguments.length ? o.call(arguments, 0) : [];
|
||
|
i = {};
|
||
|
switch(t.length) {
|
||
|
case 2:
|
||
|
i = t[0], e = t[1];
|
||
|
break;
|
||
|
case 3:
|
||
|
if(t[1] instanceof Function) {
|
||
|
i = t[0], e = t[1], n = t[2]
|
||
|
} else {
|
||
|
i.login = t[0], i.passcode = t[1], e = t[2]
|
||
|
}
|
||
|
break;
|
||
|
case 4:
|
||
|
i.login = t[0], i.passcode = t[1], e = t[2], n = t[3];
|
||
|
break;
|
||
|
default:
|
||
|
i.login = t[0], i.passcode = t[1], e = t[2], n = t[3], i.host = t[4]
|
||
|
}
|
||
|
return [i, e, n]
|
||
|
};
|
||
|
r.prototype.connect = function() {
|
||
|
var r, s, u, a;
|
||
|
r = 1 <= arguments.length ? o.call(arguments, 0) : [];
|
||
|
a = this._parseConnect.apply(this, r);
|
||
|
u = a[0], this.connectCallback = a[1], s = a[2];
|
||
|
if(typeof this.debug === "function") {
|
||
|
this.debug("Opening Web Socket...")
|
||
|
}
|
||
|
this.ws.onmessage = function(i) {
|
||
|
return function(r) {
|
||
|
var o, u, a, c, f, h, l, p, d, g, b, m, v;
|
||
|
c = typeof ArrayBuffer !== "undefined" && r.data instanceof ArrayBuffer ? (o = new Uint8Array(r.data), typeof i.debug === "function" ? i.debug("--- got data length: " + o.length) : void 0, function() {
|
||
|
var t, e, n;
|
||
|
n = [];
|
||
|
for(t = 0, e = o.length; t < e; t++) {
|
||
|
u = o[t];
|
||
|
n.push(String.fromCharCode(u))
|
||
|
}
|
||
|
return n
|
||
|
}().join("")) : r.data;
|
||
|
i.serverActivity = e();
|
||
|
if(c === t.LF) {
|
||
|
if(typeof i.debug === "function") {
|
||
|
i.debug("<<< PONG")
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
if(typeof i.debug === "function") {
|
||
|
i.debug("<<< " + c)
|
||
|
}
|
||
|
d = n.unmarshall(i.partialData + c);
|
||
|
i.partialData = d.partial;
|
||
|
m = d.frames;
|
||
|
v = [];
|
||
|
for(g = 0, b = m.length; g < b; g++) {
|
||
|
f = m[g];
|
||
|
switch(f.command) {
|
||
|
case "CONNECTED":
|
||
|
if(typeof i.debug === "function") {
|
||
|
i.debug("connected to server " + f.headers.server)
|
||
|
}
|
||
|
i.connected = true;
|
||
|
i._setupHeartbeat(f.headers);
|
||
|
v.push(typeof i.connectCallback === "function" ? i.connectCallback(f) : void 0);
|
||
|
break;
|
||
|
case "MESSAGE":
|
||
|
p = f.headers.subscription;
|
||
|
l = i.subscriptions[p] || i.onreceive;
|
||
|
if(l) {
|
||
|
a = i;
|
||
|
h = f.headers["message-id"];
|
||
|
f.ack = function(t) {
|
||
|
if(t == null) {
|
||
|
t = {}
|
||
|
}
|
||
|
return a.ack(h, p, t)
|
||
|
};
|
||
|
f.nack = function(t) {
|
||
|
if(t == null) {
|
||
|
t = {}
|
||
|
}
|
||
|
return a.nack(h, p, t)
|
||
|
};
|
||
|
v.push(l(f))
|
||
|
} else {
|
||
|
v.push(typeof i.debug === "function" ? i.debug("Unhandled received MESSAGE: " + f) : void 0)
|
||
|
}
|
||
|
break;
|
||
|
case "RECEIPT":
|
||
|
v.push(typeof i.onreceipt === "function" ? i.onreceipt(f) : void 0);
|
||
|
break;
|
||
|
case "ERROR":
|
||
|
v.push(typeof s === "function" ? s(f) : void 0);
|
||
|
break;
|
||
|
default:
|
||
|
v.push(typeof i.debug === "function" ? i.debug("Unhandled frame: " + f) : void 0)
|
||
|
}
|
||
|
}
|
||
|
return v
|
||
|
}
|
||
|
}(this);
|
||
|
this.ws.onclose = function(t) {
|
||
|
return function() {
|
||
|
var e;
|
||
|
e = "Whoops! Lost connection to " + t.ws.url;
|
||
|
if(typeof t.debug === "function") {
|
||
|
t.debug(e)
|
||
|
}
|
||
|
t._cleanUp();
|
||
|
return typeof s === "function" ? s(e) : void 0
|
||
|
}
|
||
|
}(this);
|
||
|
return this.ws.onopen = function(t) {
|
||
|
return function() {
|
||
|
if(typeof t.debug === "function") {
|
||
|
t.debug("Web Socket Opened...")
|
||
|
}
|
||
|
u["accept-version"] = i.VERSIONS.supportedVersions();
|
||
|
u["heart-beat"] = [t.heartbeat.outgoing, t.heartbeat.incoming].join(",");
|
||
|
return t._transmit("CONNECT", u)
|
||
|
}
|
||
|
}(this)
|
||
|
};
|
||
|
r.prototype.disconnect = function(t, e) {
|
||
|
if(e == null) {
|
||
|
e = {}
|
||
|
}
|
||
|
this._transmit("DISCONNECT", e);
|
||
|
this.ws.onclose = null;
|
||
|
this.ws.close();
|
||
|
this._cleanUp();
|
||
|
return typeof t === "function" ? t() : void 0
|
||
|
};
|
||
|
r.prototype._cleanUp = function() {
|
||
|
this.connected = false;
|
||
|
if(this.pinger) {
|
||
|
i.clearInterval(this.pinger)
|
||
|
}
|
||
|
if(this.ponger) {
|
||
|
return i.clearInterval(this.ponger)
|
||
|
}
|
||
|
};
|
||
|
r.prototype.send = function(t, e, n) {
|
||
|
if(e == null) {
|
||
|
e = {}
|
||
|
}
|
||
|
if(n == null) {
|
||
|
n = ""
|
||
|
}
|
||
|
e.destination = t;
|
||
|
return this._transmit("SEND", e, n)
|
||
|
};
|
||
|
r.prototype.subscribe = function(t, e, n) {
|
||
|
var i;
|
||
|
if(n == null) {
|
||
|
n = {}
|
||
|
}
|
||
|
if(!n.id) {
|
||
|
n.id = "sub-" + this.counter++
|
||
|
}
|
||
|
n.destination = t;
|
||
|
this.subscriptions[n.id] = e;
|
||
|
this._transmit("SUBSCRIBE", n);
|
||
|
i = this;
|
||
|
return {
|
||
|
id: n.id,
|
||
|
unsubscribe: function() {
|
||
|
return i.unsubscribe(n.id)
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
r.prototype.unsubscribe = function(t) {
|
||
|
delete this.subscriptions[t];
|
||
|
return this._transmit("UNSUBSCRIBE", {
|
||
|
id: t
|
||
|
})
|
||
|
};
|
||
|
r.prototype.begin = function(t) {
|
||
|
var e, n;
|
||
|
n = t || "tx-" + this.counter++;
|
||
|
this._transmit("BEGIN", {
|
||
|
transaction: n
|
||
|
});
|
||
|
e = this;
|
||
|
return {
|
||
|
id: n,
|
||
|
commit: function() {
|
||
|
return e.commit(n)
|
||
|
},
|
||
|
abort: function() {
|
||
|
return e.abort(n)
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
r.prototype.commit = function(t) {
|
||
|
return this._transmit("COMMIT", {
|
||
|
transaction: t
|
||
|
})
|
||
|
};
|
||
|
r.prototype.abort = function(t) {
|
||
|
return this._transmit("ABORT", {
|
||
|
transaction: t
|
||
|
})
|
||
|
};
|
||
|
r.prototype.ack = function(t, e, n) {
|
||
|
if(n == null) {
|
||
|
n = {}
|
||
|
}
|
||
|
n["message-id"] = t;
|
||
|
n.subscription = e;
|
||
|
return this._transmit("ACK", n)
|
||
|
};
|
||
|
r.prototype.nack = function(t, e, n) {
|
||
|
if(n == null) {
|
||
|
n = {}
|
||
|
}
|
||
|
n["message-id"] = t;
|
||
|
n.subscription = e;
|
||
|
return this._transmit("NACK", n)
|
||
|
};
|
||
|
return r
|
||
|
}();
|
||
|
i = {
|
||
|
VERSIONS: {
|
||
|
V1_0: "1.0",
|
||
|
V1_1: "1.1",
|
||
|
V1_2: "1.2",
|
||
|
supportedVersions: function() {
|
||
|
return "1.1,1.0"
|
||
|
}
|
||
|
},
|
||
|
client: function(t, n) {
|
||
|
var r, o;
|
||
|
if(n == null) {
|
||
|
n = ["v10.stomp", "v11.stomp"]
|
||
|
}
|
||
|
r = i.WebSocketClass || WebSocket;
|
||
|
o = new r(t, n);
|
||
|
return new e(o)
|
||
|
},
|
||
|
over: function(t) {
|
||
|
return new e(t)
|
||
|
},
|
||
|
Frame: n
|
||
|
};
|
||
|
if(typeof exports !== "undefined" && exports !== null) {
|
||
|
exports.Stomp = i
|
||
|
}
|
||
|
if(typeof window !== "undefined" && window !== null) {
|
||
|
i.setInterval = function(t, e) {
|
||
|
return window.setInterval(e, t)
|
||
|
};
|
||
|
i.clearInterval = function(t) {
|
||
|
return window.clearInterval(t)
|
||
|
};
|
||
|
window.Stomp = i
|
||
|
} else if(!exports) {
|
||
|
self.Stomp = i
|
||
|
}
|
||
|
}).call(this);
|