@@ -2017,6 +2017,8 @@ if (!window.console) {
20172017 return user ;
20182018 } ;
20192019
2020+ const DEFAULT_CALLBACK_ID = '__default_callback_id__' ;
2021+
20202022 /**
20212023 * Initializes the ClearBlade messaging object and connects to a server.
20222024 * @class ClearBlade.Messaging
@@ -2109,11 +2111,15 @@ if (!window.console) {
21092111 } ;
21102112
21112113 messaging . client . onMessageArrived = function ( message ) {
2112- // messageCallback from Subscribe()
2113-
2114- messageCallbacks [
2115- ClearBlade . getMessageTopic ( message . destinationName , messageCallbacks )
2116- ] ( message . payloadString , message ) ;
2114+ // messageCallbacks from Subscribe() may contain multiple callbacks per topic
2115+ const callbacks = Object . values (
2116+ messageCallbacks [
2117+ ClearBlade . getMessageTopic ( message . destinationName , messageCallbacks )
2118+ ]
2119+ ) ;
2120+ for ( callback of callbacks ) {
2121+ callback ( message . payloadString , message ) ;
2122+ }
21172123 } ;
21182124 // the mqtt websocket library uses "onConnect," but our terminology uses
21192125 // "onSuccess" and "onFailure"
@@ -2186,7 +2192,12 @@ if (!window.console) {
21862192 * var cb = ClearBlade.Messaging({}, callback);
21872193 * cb.subscribe("ClearBlade/is awesome!",{});
21882194 */
2189- messaging . subscribe = function ( topic , options , messageCallback ) {
2195+ messaging . subscribe = function (
2196+ topic ,
2197+ options ,
2198+ messageCallback ,
2199+ callbackId
2200+ ) {
21902201 var conf = {
21912202 qos : this . _qos || 0 ,
21922203 } ;
@@ -2197,7 +2208,15 @@ if (!window.console) {
21972208
21982209 this . client . subscribe ( topic , conf ) ;
21992210
2200- messageCallbacks [ topic ] = messageCallback ;
2211+ if ( messageCallbacks [ topic ] ) {
2212+ messageCallbacks [ topic ] = Object . assign ( messageCallbacks [ topic ] , {
2213+ [ callbackId || DEFAULT_CALLBACK_ID ] : messageCallback ,
2214+ } ) ;
2215+ } else {
2216+ messageCallbacks [ topic ] = {
2217+ [ callbackId || DEFAULT_CALLBACK_ID ] : messageCallback ,
2218+ } ;
2219+ }
22012220 } ;
22022221
22032222 /**
@@ -2218,15 +2237,17 @@ if (!window.console) {
22182237 * var cb = ClearBlade.Messaging({}, callback);
22192238 * cb.unsubscribe("ClearBlade/is awesome!",{"onSuccess":function(){console.log("we unsubscribe");});
22202239 */
2221- messaging . unsubscribe = function ( topic , options ) {
2240+ messaging . unsubscribe = function ( topic , options , callbackId ) {
22222241 var conf = { } ;
22232242 conf [ 'invocationContext' ] = options [ 'invocationContext' ] || { } ;
22242243 conf [ 'onSuccess' ] = options [ 'onSuccess' ] || function ( ) { } ; //null;
22252244 conf [ 'onFailure' ] = options [ 'onFailure' ] || function ( ) { } ; //null;
22262245 conf [ 'timeout' ] = options [ 'timeout' ] || 60 ;
22272246
2228- delete messageCallbacks [ topic ] ;
2229- this . client . unsubscribe ( topic , conf ) ;
2247+ delete messageCallbacks [ topic ] [ callbackId || DEFAULT_CALLBACK_ID ] ;
2248+ if ( Object . keys ( messageCallbacks [ topic ] ) . length === 0 ) {
2249+ this . client . unsubscribe ( topic , conf ) ;
2250+ }
22302251 } ;
22312252
22322253 /**
0 commit comments