|
@@ -0,0 +1,470 @@
|
|
|
+// 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
|
|
|
+ return (function () {
|
|
|
+ var r, o, s, u
|
|
|
+ s = n.split(RegExp('' + t.NULL + t.LF + '*'))
|
|
|
+ u = []
|
|
|
+ for (r = 0, o = s.length; r < o; r++) {
|
|
|
+ i = s[r]
|
|
|
+ if ((i != null ? i.length : void 0) > 0) {
|
|
|
+ u.push(e(i))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return u
|
|
|
+ })()
|
|
|
+ }
|
|
|
+ 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 = {}
|
|
|
+ }
|
|
|
+ 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
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ b = n.unmarshall(c)
|
|
|
+ m = []
|
|
|
+ for (d = 0, g = b.length; d < g; d++) {
|
|
|
+ f = b[d]
|
|
|
+ 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)
|
|
|
+ m.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)
|
|
|
+ }
|
|
|
+ m.push(l(f))
|
|
|
+ } else {
|
|
|
+ m.push(
|
|
|
+ typeof i.debug === 'function'
|
|
|
+ ? i.debug('Unhandled received MESSAGE: ' + f)
|
|
|
+ : void 0
|
|
|
+ )
|
|
|
+ }
|
|
|
+ break
|
|
|
+ case 'RECEIPT':
|
|
|
+ m.push(typeof i.onreceipt === 'function' ? i.onreceipt(f) : void 0)
|
|
|
+ break
|
|
|
+ case 'ERROR':
|
|
|
+ m.push(typeof s === 'function' ? s(f) : void 0)
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ m.push(
|
|
|
+ typeof i.debug === 'function'
|
|
|
+ ? i.debug('Unhandled frame: ' + f)
|
|
|
+ : void 0
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return m
|
|
|
+ }
|
|
|
+ })(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)
|