Skip to content
This repository was archived by the owner on Apr 9, 2020. It is now read-only.

Remove native clients #17

Merged
merged 1 commit into from
May 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
remove native clients so that there will not be any clients on the na…
…tive side of the system that can not be controlled when their references are removed from RN.
  • Loading branch information
pellepersson committed Feb 14, 2017
commit 135a7feba66ccdb64032de9cb8f8c6323c733b80
7 changes: 6 additions & 1 deletion android/src/main/java/com/tuanpm/RCTMqtt/RCTMqttModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,12 @@ public void connect(final int clientRef) {
public void disconnect(final int clientRef) {
clients.get(clientRef).disconnect();
}


@ReactMethod
public void removeClient(final int clientRef, Promise promise) {
clients.remove(clientRef);
promise.resolve(clientRef);
}

@ReactMethod
public void subscribe(final int clientRef, final String topic, final int qos) {
Expand Down
35 changes: 19 additions & 16 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ module.exports = {
client.dispatchEvent(data);
});
},
setEventHandler: function() {
this.eventHandler = DeviceEventEmitter.addListener("mqtt_events", (data) => this.dispatchEvents(data));
},
createClient: async function(options) {
if(options.uri) {
var pattern = /^((mqtt[s]?|ws[s]?)?:(\/\/)([0-9a-zA-Z_\.]*):?(\d+))$/;
Expand Down Expand Up @@ -78,27 +81,27 @@ module.exports = {

/* Listen mqtt event */
if(this.eventHandler === null) {
console.log('add mqtt_events listener')
this.eventHandler = DeviceEventEmitter.addListener(
"mqtt_events",
(data) => this.dispatchEvents(data));
this.setEventHandler();
}
this.clients.push(client);

return client;
},
removeClient: function(client) {
var clientIdx = this.clients.indexOf(client);

/* TODO: destroy client in native module */

if(clientIdx > -1)
this.clients.splice(clientIdx, 1);

if(this.clients.length > 0) {
this.eventHandler.remove();
this.eventHandler = null;
}
Mqtt.removeClient(client.clientRef)
.then(() => {
var clientIdx = this.clients.indexOf(client);

if (clientIdx > -1) {
this.clients.splice(clientIdx, 1);
}

if (this.clients.length > 0) {
if (this.eventHandler !== null) {
this.eventHandler.remove();
this.setEventHandler();
}
}
});
}

};
10 changes: 10 additions & 0 deletions ios/RCTMqtt/RCTMqtt.m
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@ - (void)appDidBecomeActive {
resolve([NSNumber numberWithInt:clientRef]);

}

RCT_EXPORT_METHOD(removeClient:(int) clientRef
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {

[[self clients] removeObjectForKey:[NSNumber numberWithInt:clientRef]];
resolve([NSNumber numberWithInt:clientRef]);

}

RCT_EXPORT_METHOD(connect:(nonnull NSNumber *) clientRef) {

[[[self clients] objectForKey:clientRef] connect];
Expand Down