src/ng-stomp.js
/**
* ngStomp
*
* @version 0.5.0
* @author Maik Hummel <m@ikhummel.com>
* @license MIT
*/
/*global
angular, SockJS, Stomp */
(function () {
angular
.module('ngStomp', [])
.service('$stomp', [
'$rootScope', '$q',
function ($rootScope, $q) {
this.sock = null
this.stomp = null
this.debug = null
this.setDebug = function (callback) {
this.debug = callback
}
this.connect = function (endpoint, headers, errorCallback, sockjsOpts) {
headers = headers || {}
sockjsOpts = sockjsOpts || {}
var dfd = $q.defer()
this.sock = new SockJS(endpoint, null, sockjsOpts)
this.sock.onclose = function () {
if (angular.isFunction(errorCallback)) {
errorCallback(new Error('Connection broken'))
}
}
this.stomp = Stomp.over(this.sock)
this.stomp.debug = this.debug
this.stomp.connect(headers, function (frame) {
dfd.resolve(frame)
}, function (err) {
dfd.reject(err)
if (angular.isFunction(errorCallback)) {
errorCallback(err)
}
})
return dfd.promise
}
this.disconnect = function () {
var dfd = $q.defer()
this.stomp.disconnect(dfd.resolve)
return dfd.promise
}
this.subscribe = this.on = function (destination, callback, headers) {
headers = headers || {}
return this.stomp.subscribe(destination, function (res) {
var payload = null
try {
payload = JSON.parse(res.body)
} finally {
if (callback) {
callback(payload, res.headers, res)
}
}
}, headers)
}
this.unsubscribe = this.off = function (subscription) {
subscription.unsubscribe()
}
this.send = function (destination, body, headers) {
var dfd = $q.defer()
try {
var payloadJson = JSON.stringify(body)
headers = headers || {}
this.stomp.send(destination, headers, payloadJson)
dfd.resolve()
} catch (e) {
dfd.reject(e)
}
return dfd.promise
}
}]
)
})();