Skip to content

Commit f419bc6

Browse files
committed
Fixes for ios part
1 parent 883b2c9 commit f419bc6

File tree

3 files changed

+52
-87
lines changed

3 files changed

+52
-87
lines changed

ios/RCTMqtt/Mqtt.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@
2222
- (void) connect;
2323
- (void) disconnect;
2424
- (void) subscribe:(NSString *)topic qos:(NSNumber *)qos;
25+
- (void) unsubscribe:(NSString *)topic;
2526
- (void) publish:(NSString *) topic data:(NSData *)data qos:(NSNumber *)qos retain:(BOOL) retain;
2627
@end

ios/RCTMqtt/Mqtt.m

Lines changed: 45 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ @implementation Mqtt
2525

2626
- (id)init {
2727
if ((self = [super init])) {
28-
2928
self.defaultOptions = @{
3029
@"host": @"localhost",
3130
@"port": @1883,
@@ -44,9 +43,9 @@ - (id)init {
4443
@"willQos": @0,
4544
@"willRetainFlag": @NO
4645
};
47-
46+
4847
}
49-
48+
5049
return self;
5150
}
5251

@@ -60,70 +59,50 @@ - (instancetype) initWithBrigde:(RCTBridge *) bridge
6059
for (NSString *key in options.keyEnumerator) { // Replace default options
6160
[self.options setValue:options[key] forKey:key];
6261
}
62+
self.manager = [[MQTTSessionManager alloc] init];
63+
self.manager.delegate = self;
64+
6365
return self;
6466
}
6567

6668
- (void) connect {
67-
if (!self.manager) {
68-
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
69-
70-
self.manager = [[MQTTSessionManager alloc] init];
71-
self.manager.delegate = self;
72-
MQTTSSLSecurityPolicy *securityPolicy = nil;
73-
if(self.options[@"tls"]) {
74-
securityPolicy = [MQTTSSLSecurityPolicy policyWithPinningMode:MQTTSSLPinningModeNone];
75-
securityPolicy.allowInvalidCertificates = YES;
76-
}
77-
78-
79-
NSData *willMsg = nil;
80-
if(self.options[@"willMsg"] != [NSNull null]) {
81-
willMsg = [self.options[@"willMsg"] dataUsingEncoding:NSUTF8StringEncoding];
82-
}
83-
[self.manager connectTo:[self.options valueForKey:@"host"]
84-
port:[self.options[@"port"] intValue]
85-
tls:[self.options[@"tls"] boolValue]
86-
keepalive:[self.options[@"keepalive"] intValue]
87-
clean:[self.options[@"clean"] intValue]
88-
auth:[self.options[@"auth"] boolValue]
89-
user:[self.options valueForKey:@"user"]
90-
pass:[self.options valueForKey:@"pass"]
91-
will:[self.options[@"will"] boolValue]
92-
willTopic:[self.options valueForKey:@"willTopic"]
93-
willMsg:willMsg
94-
willQos:(MQTTQosLevel)[self.options[@"willQos"] intValue]
95-
willRetainFlag:[self.options[@"willRetainFlag"] boolValue]
96-
withClientId:[self.options valueForKey:@"clientId"]
97-
securityPolicy:securityPolicy
98-
certificates:nil
99-
];
100-
101-
[self.manager addObserver:self
102-
forKeyPath:@"state"
103-
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
104-
context:nil];
105-
106-
}];
107-
108-
109-
} else {
110-
111-
[self.manager connectToLast];
112-
69+
MQTTSSLSecurityPolicy *securityPolicy = nil;
70+
if(self.options[@"tls"]) {
71+
securityPolicy = [MQTTSSLSecurityPolicy policyWithPinningMode:MQTTSSLPinningModeNone];
72+
securityPolicy.allowInvalidCertificates = YES;
11373
}
114-
}
11574

75+
NSData *willMsg = nil;
76+
if(self.options[@"willMsg"] != [NSNull null]) {
77+
willMsg = [self.options[@"willMsg"] dataUsingEncoding:NSUTF8StringEncoding];
78+
}
79+
[self.manager connectTo:[self.options valueForKey:@"host"]
80+
port:[self.options[@"port"] intValue]
81+
tls:[self.options[@"tls"] boolValue]
82+
keepalive:[self.options[@"keepalive"] intValue]
83+
clean:[self.options[@"clean"] intValue]
84+
auth:[self.options[@"auth"] boolValue]
85+
user:[self.options valueForKey:@"user"]
86+
pass:[self.options valueForKey:@"pass"]
87+
will:[self.options[@"will"] boolValue]
88+
willTopic:[self.options valueForKey:@"willTopic"]
89+
willMsg:willMsg
90+
willQos:(MQTTQosLevel)[self.options[@"willQos"] intValue]
91+
willRetainFlag:[self.options[@"willRetainFlag"] boolValue]
92+
withClientId:[self.options valueForKey:@"clientId"]
93+
securityPolicy:securityPolicy
94+
certificates:nil
95+
];
96+
}
11697

117-
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
118-
119-
switch (self.manager.state) {
98+
- (void)sessionManager:(MQTTSessionManager *)sessonManager didChangeState:(MQTTSessionManagerState)newState {
99+
switch (newState) {
120100
case MQTTSessionManagerStateClosed:
121101
[self.bridge.eventDispatcher sendDeviceEventWithName:@"mqtt_events"
122102
body:@{@"event": @"closed",
123103
@"clientRef": [NSNumber numberWithInt:[self clientRef]],
124104
@"message": @"closed"
125105
}];
126-
127106
break;
128107
case MQTTSessionManagerStateClosing:
129108
[self.bridge.eventDispatcher sendDeviceEventWithName:@"mqtt_events"
@@ -165,25 +144,22 @@ - (void) disconnect {
165144
}
166145

167146
- (void) subscribe:(NSString *)topic qos:(NSNumber *)qos {
168-
169-
[self.manager setSubscriptions:[NSDictionary dictionaryWithObject:qos forKey:topic]];
147+
NSMutableDictionary *subscriptions = [self.manager.subscriptions mutableCopy];
148+
[subscriptions setObject:qos forKey: topic];
149+
[self.manager setSubscriptions:subscriptions];
150+
}
151+
152+
- (void) unsubscribe:(NSString *)topic {
153+
NSMutableDictionary *subscriptions = [self.manager.subscriptions mutableCopy];
154+
[subscriptions removeObjectForKey: topic];
155+
[self.manager setSubscriptions:subscriptions];
170156
}
171157

172158
- (void) publish:(NSString *) topic data:(NSData *)data qos:(NSNumber *)qos retain:(BOOL) retain {
173-
[self.manager sendData:data
174-
topic:topic
175-
qos:[qos intValue]
176-
retain:retain];
177-
//[data dataUsingEncoding:NSUTF8StringEncoding]
159+
[self.manager sendData:data topic:topic qos:[qos intValue] retain:retain];
178160
}
179-
/*
180-
* MQTTSessionManagerDelegate
181-
*/
161+
182162
- (void)handleMessage:(NSData *)data onTopic:(NSString *)topic retained:(BOOL)retained {
183-
/*
184-
* MQTTClient: process received message
185-
*/
186-
187163
NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
188164
//RCTLogInfo(@" %@ : %@", topic, dataString);
189165
[self.bridge.eventDispatcher sendDeviceEventWithName:@"mqtt_events"
@@ -196,28 +172,13 @@ - (void)handleMessage:(NSData *)data onTopic:(NSString *)topic retained:(BOOL)re
196172
@"retain": [NSNumber numberWithBool:retained]
197173
}
198174
}];
199-
175+
200176
}
201177

202178

203179
- (void)dealloc
204180
{
205181
[self disconnect];
206-
@try {
207-
208-
@try{
209-
210-
[[NSNotificationCenter defaultCenter] removeObserver:self];
211-
[self.manager removeObserver:self forKeyPath:@"state"];
212-
[[NSOperationQueue mainQueue] cancelAllOperations];
213-
}@catch(id anException){
214-
//do nothing, obviously it wasn't attached because an exception was thrown
215-
}
216-
}
217-
@catch (NSException *exception) {
218-
219-
}
220-
221182
}
222183

223184

ios/RCTMqtt/RCTMqtt.m

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ - (void)appDidBecomeActive {
9191

9292
RCT_EXPORT_METHOD(subscribe:(nonnull NSNumber *) clientRef topic:(NSString *)topic qos:(nonnull NSNumber *)qos) {
9393
[[[self clients] objectForKey:clientRef] subscribe:topic qos:qos];
94-
94+
}
95+
96+
RCT_EXPORT_METHOD(unsubscribe:(nonnull NSNumber *) clientRef topic:(NSString *)topic) {
97+
[[[self clients] objectForKey:clientRef] unsubscribe:topic qos:qos];
9598
}
9699

97100
RCT_EXPORT_METHOD(publish:(nonnull NSNumber *) clientRef topic:(NSString *)topic data:(NSString*)data qos:(nonnull NSNumber *)qos retain:(BOOL)retain) {
@@ -104,8 +107,8 @@ - (void)appDidBecomeActive {
104107

105108
- (void)dealloc
106109
{
107-
108-
110+
111+
109112
}
110113

111114
@end

0 commit comments

Comments
 (0)