Skip to content

Commit df6d3bc

Browse files
committed
ios support unsubscribe
1 parent 6ea33f5 commit df6d3bc

File tree

3 files changed

+48
-31
lines changed

3 files changed

+48
-31
lines changed

ios/RCTMqtt/Mqtt.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
// Copyright © 2016 Tuan PM. All rights reserved.
77
//
88
#import <Foundation/Foundation.h>
9-
#import "RCTBridgeModule.h"
10-
#import "RCTLog.h"
11-
#import "RCTUtils.h"
12-
#import "RCTEventDispatcher.h"
9+
#import <React/RCTBridgeModule.h>
10+
#import <React/RCTLog.h>
11+
#import <React/RCTUtils.h>
12+
#import <React/RCTEventDispatcher.h>
1313

1414
#import <MQTTClient/MQTTClient.h>
1515
#import <MQTTClient/MQTTSessionManager.h>
@@ -25,5 +25,6 @@
2525
- (void) connect;
2626
- (void) disconnect;
2727
- (void) subscribe:(NSString *)topic qos:(NSNumber *)qos;
28+
- (void) unsubscribe:(NSString *)topic;
2829
- (void) publish:(NSString *) topic data:(NSData *)data qos:(NSNumber *)qos retain:(BOOL) retain;
29-
@end
30+
@end

ios/RCTMqtt/Mqtt.m

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,35 @@ - (void) disconnect {
164164
}
165165

166166
- (void) subscribe:(NSString *)topic qos:(NSNumber *)qos {
167+
168+
NSDictionary<NSString *, NSNumber *> *oldSubs=[self.manager subscriptions];
169+
NSMutableDictionary<NSString *, NSNumber *> *newSubscriptions=[NSMutableDictionary dictionaryWithObject:qos forKey:topic];
167170

168-
[self.manager setSubscriptions:[NSDictionary dictionaryWithObject:qos forKey:topic]];
171+
for (NSString *topicFilter in oldSubs) {
172+
if (![newSubscriptions objectForKey:topicFilter]) {
173+
[newSubscriptions setObject:oldSubs[topicFilter] forKey:topicFilter];
174+
175+
}
176+
}
177+
[self.manager setSubscriptions:newSubscriptions];
178+
//[self.manager setSubscriptions:[NSDictionary dictionaryWithObject:qos forKey:topic]];
179+
}
180+
181+
- (void) unsubscribe:(NSString *)topic {
182+
NSDictionary<NSString *, NSNumber *> *oldSubs=[self.manager subscriptions];
183+
NSMutableDictionary<NSString *, NSNumber *> *newSubscriptions=[[NSMutableDictionary alloc] init];
184+
for (NSString *topicFilter in oldSubs) {
185+
if (![topic isEqualToString:topicFilter]) {
186+
[newSubscriptions setObject:oldSubs[topicFilter] forKey:topicFilter];
187+
}
188+
}
189+
[self.manager setSubscriptions:newSubscriptions];
169190
}
170191

171192
- (void) publish:(NSString *) topic data:(NSData *)data qos:(NSNumber *)qos retain:(BOOL) retain {
172193
[self.manager sendData:data
173194
topic:topic
174-
qos:[qos intValue]
195+
qos:(MQTTQosLevel)qos
175196
retain:retain];
176197
//[data dataUsingEncoding:NSUTF8StringEncoding]
177198
}

ios/RCTMqtt/RCTMqtt.m

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
//
88

99
#import "RCTMqtt.h"
10-
#import "RCTBridgeModule.h"
11-
#import "RCTLog.h"
12-
#import "RCTUtils.h"
13-
#import "RCTEventDispatcher.h"
10+
#import <React/RCTBridgeModule.h>
11+
#import <React/RCTLog.h>
12+
#import <React/RCTUtils.h>
13+
#import <React/RCTEventDispatcher.h>
1414

1515
#import <MQTTClient/MQTTClient.h>
1616
#import <MQTTClient/MQTTSessionManager.h>
@@ -85,37 +85,32 @@ - (void)appDidBecomeActive {
8585
resolve([NSNumber numberWithInt:clientRef]);
8686

8787
}
88-
89-
RCT_EXPORT_METHOD(removeClient:(int) clientRef
90-
resolver:(RCTPromiseResolveBlock)resolve
91-
rejecter:(RCTPromiseRejectBlock)reject) {
88+
RCT_EXPORT_METHOD(connect:(int) clientRef) {
9289

93-
[[self clients] removeObjectForKey:[NSNumber numberWithInt:clientRef]];
94-
resolve([NSNumber numberWithInt:clientRef]);
90+
[[[self clients] objectForKey:[NSNumber numberWithInt:clientRef]] connect];
9591

9692
}
9793

98-
RCT_EXPORT_METHOD(connect:(nonnull NSNumber *) clientRef) {
99-
100-
[[[self clients] objectForKey:clientRef] connect];
101-
102-
}
10394

95+
RCT_EXPORT_METHOD(disconnect:(int) clientRef) {
96+
[[[self clients] objectForKey:[NSNumber numberWithInt:clientRef]] disconnect];
97+
}
10498

105-
RCT_EXPORT_METHOD(disconnect:(nonnull NSNumber *) clientRef) {
106-
[[[self clients] objectForKey:clientRef] disconnect];
99+
RCT_EXPORT_METHOD(subscribe:(int) clientRef topic:(NSString *)topic qos:(int)qos) {
100+
[[[self clients] objectForKey:[NSNumber numberWithInt:clientRef]] subscribe:topic qos:[NSNumber numberWithInt:qos]];
101+
107102
}
108103

109-
RCT_EXPORT_METHOD(subscribe:(nonnull NSNumber *) clientRef topic:(NSString *)topic qos:(nonnull NSNumber *)qos) {
110-
[[[self clients] objectForKey:clientRef] subscribe:topic qos:qos]];
104+
RCT_EXPORT_METHOD(unsubscribe:(int) clientRef topic:(NSString *)topic) {
105+
[[[self clients] objectForKey:[NSNumber numberWithInt:clientRef]] unsubscribe:topic];
111106

112107
}
113108

114-
RCT_EXPORT_METHOD(publish:(nonnull NSNumber *) clientRef topic:(NSString *)topic data:(NSString*)data qos:(nonnull NSNumber *)qos retain:(BOOL)retain) {
115-
[[[self clients] objectForKey:clientRef] publish:topic
116-
data:[data dataUsingEncoding:NSUTF8StringEncoding]
117-
qos:qos
118-
retain:retain];
109+
RCT_EXPORT_METHOD(publish:(int) clientRef topic:(NSString *)topic data:(NSString*)data qos:(int)qos retain:(int)retain) {
110+
[[[self clients] objectForKey:[NSNumber numberWithInt:clientRef]] publish:topic
111+
data:[data dataUsingEncoding:NSUTF8StringEncoding]
112+
qos:[NSNumber numberWithInt:qos]
113+
retain:(BOOL)retain];
119114

120115
}
121116

0 commit comments

Comments
 (0)