mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-10 19:43:16 +00:00
54 lines
1.7 KiB
JavaScript
54 lines
1.7 KiB
JavaScript
define([
|
|
"underscore",
|
|
"backbone"
|
|
], function (_, Backbone) {
|
|
var activeSession = null;
|
|
|
|
return _.extend({
|
|
connect: function(url) {
|
|
if (this.hasSession()) {
|
|
throw "Connection is already active";
|
|
}
|
|
var that = this;
|
|
// autobahn js is defined as a global object there is no way to load
|
|
// it as a UMD module
|
|
ab.connect(url, function (session) {
|
|
activeSession = session;
|
|
that.trigger("ws:connect", activeSession);
|
|
},
|
|
function (code, reason) {
|
|
that.trigger("ws:session-gone", code, reason);
|
|
});
|
|
},
|
|
close: function() {
|
|
if (false === this.hasSession()) {
|
|
return;
|
|
}
|
|
activeSession.close();
|
|
activeSession = null;
|
|
this.trigger("ws:session-close");
|
|
},
|
|
hasSession: function() {
|
|
return activeSession !== null;
|
|
},
|
|
subscribe: function(topic, callback) {
|
|
if (false === this.hasSession()) {
|
|
this.on("ws:connect", function(session) {
|
|
session.subscribe(topic, callback);
|
|
this.trigger("ws:session-subscribe", topic);
|
|
});
|
|
return;
|
|
}
|
|
activeSession.subscribe(topic, callback);
|
|
this.trigger("ws:session-subscribe", topic);
|
|
},
|
|
unsubscribe: function(topic, callback) {
|
|
if (false === this.hasSession()) {
|
|
return;
|
|
}
|
|
activeSession.unsubscribe(topic, callback);
|
|
this.trigger("ws:session-unsubscribe", topic);
|
|
}
|
|
}, Backbone.Events);
|
|
});
|