diff --git a/MQTTClient.podspec b/MQTTClient.podspec
index 4b2a9b3d..317f6650 100644
--- a/MQTTClient.podspec
+++ b/MQTTClient.podspec
@@ -1,13 +1,13 @@
Pod::Spec.new do |mqttc|
mqttc.name = "MQTTClient"
- mqttc.version = "0.7.4"
+ mqttc.version = "0.7.5"
mqttc.summary = "iOS, OSX and tvOS native ObjectiveC MQTT Client Framework"
mqttc.homepage = "https://github.com/ckrey/MQTT-Client-Framework"
mqttc.license = { :type => "EPLv1", :file => "LICENSE" }
mqttc.author = { "Christoph Krey" => "krey.christoph@gmail.com" }
mqttc.source = {
:git => "https://github.com/ckrey/MQTT-Client-Framework.git",
- :tag => "0.7.4",
+ :tag => "0.7.5",
:submodules => true
}
diff --git a/MQTTClient/MQTTClient/MQTTCoreDataPersistence.m b/MQTTClient/MQTTClient/MQTTCoreDataPersistence.m
index 9d45e357..b3b5591e 100755
--- a/MQTTClient/MQTTClient/MQTTCoreDataPersistence.m
+++ b/MQTTClient/MQTTClient/MQTTCoreDataPersistence.m
@@ -162,28 +162,6 @@ - (void)setDeadline:(NSDate *)deadline {
@end
-// Attempt to fix #117
-//
-//@interface NSManagedObjectContext ( Recursive )
-//- (void)recursiveSave;
-//@end
-//
-//@implementation NSManagedObjectContext ( Recursive )
-//
-//- (void)recursiveSave {
-// if (self.hasChanges) {
-// NSError *error = nil;
-// if (![self save: &error]) {
-// DDLogError(@"[MQTTPersistence] sync error %@", error);
-// }
-//
-// if (self.parentContext) {
-// [self.parentContext recursiveSave];
-// }
-// }
-//}
-//@end
-//
@implementation MQTTCoreDataPersistence
@synthesize persistent;
@synthesize maxSize;
@@ -260,28 +238,52 @@ - (void)deleteAllFlowsForClientId:(NSString *)clientId {
}
- (void)sync {
- [self.managedObjectContext performBlockAndWait:^{
+ if ([NSThread isMainThread]) {
+ [self internalSync];
+ } else {
+ [self.managedObjectContext performBlockAndWait:^{
+ [self internalSync];
+ }];
+ }
+ if ([NSThread isMainThread]) {
+ [self internalParentSync];
+ } else {
+ [self.managedObjectContext.parentContext performBlockAndWait:^{
+ [self internalParentSync];
+ }];
+ }
+}
+
+- (void)internalSync {
+ if (self.managedObjectContext.hasChanges) {
+ DDLogVerbose(@"[MQTTPersistence] pre-sync: i%lu u%lu d%lu",
+ (unsigned long)self.managedObjectContext.insertedObjects.count,
+ (unsigned long)self.managedObjectContext.updatedObjects.count,
+ (unsigned long)self.managedObjectContext.deletedObjects.count
+ );
+ NSError *error = nil;
+ if (![self.managedObjectContext save:&error]) {
+ DDLogError(@"[MQTTPersistence] sync error %@", error);
+ }
if (self.managedObjectContext.hasChanges) {
- DDLogVerbose(@"[MQTTPersistence] pre-sync: i%lu u%lu d%lu",
- (unsigned long)self.managedObjectContext.insertedObjects.count,
- (unsigned long)self.managedObjectContext.updatedObjects.count,
- (unsigned long)self.managedObjectContext.deletedObjects.count
- );
- NSError *error = nil;
- if (![self.managedObjectContext save:&error]) {
- DDLogError(@"[MQTTPersistence] sync error %@", error);
- }
- if (self.managedObjectContext.hasChanges) {
- DDLogError(@"[MQTTPersistence] sync not complete");
- }
- DDLogVerbose(@"[MQTTPersistence] postsync: i%lu u%lu d%lu",
- (unsigned long)self.managedObjectContext.insertedObjects.count,
- (unsigned long)self.managedObjectContext.updatedObjects.count,
- (unsigned long)self.managedObjectContext.deletedObjects.count
- );
- [self sizes];
+ DDLogError(@"[MQTTPersistence] sync not complete");
}
- }];
+ DDLogVerbose(@"[MQTTPersistence] postsync: i%lu u%lu d%lu",
+ (unsigned long)self.managedObjectContext.insertedObjects.count,
+ (unsigned long)self.managedObjectContext.updatedObjects.count,
+ (unsigned long)self.managedObjectContext.deletedObjects.count
+ );
+ [self sizes];
+ }
+}
+
+- (void)internalParentSync {
+ if (self.managedObjectContext.parentContext && self.managedObjectContext.parentContext.hasChanges) {
+ NSError *error = nil;
+ if (![self.managedObjectContext.parentContext save:&error]) {
+ DDLogError(@"[MQTTPersistence] parentContext sync error %@", error);
+ }
+ }
}
- (NSArray *)allFlowsforClientId:(NSString *)clientId
diff --git a/MQTTClient/MQTTClientTests/MQTTClientPublishTests.m b/MQTTClient/MQTTClientTests/MQTTClientPublishTests.m
index 73fbbfc8..078b6ee1 100644
--- a/MQTTClient/MQTTClientTests/MQTTClientPublishTests.m
+++ b/MQTTClient/MQTTClientTests/MQTTClientPublishTests.m
@@ -63,6 +63,27 @@ - (void)testPublish_r0_q0_zeroLengthPayload {
}
}
+- (void)testPublish_r1_q0_zeroLengthPayload {
+ for (NSString *broker in self.brokers.allKeys) {
+ DDLogVerbose(@"testing broker %@", broker);
+ NSDictionary *parameters = self.brokers[broker];
+ [self connect:parameters];
+ [self testPublish:[[NSData alloc] init]
+ onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
+ retain:TRUE
+ atLevel:0];
+ [self testPublish:[@"data" dataUsingEncoding:NSUTF8StringEncoding]
+ onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
+ retain:TRUE
+ atLevel:0];
+ [self testPublish:[[NSData alloc] init]
+ onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
+ retain:TRUE
+ atLevel:0];
+ [self shutdown:parameters];
+ }
+}
+
- (void)testPublish_r0_q0 {
for (NSString *broker in self.brokers.allKeys) {
DDLogVerbose(@"testing broker %@", broker);
diff --git a/MQTTClient/MQTTClientTests/MQTTTestHelpers.plist b/MQTTClient/MQTTClientTests/MQTTTestHelpers.plist
index 17da2387..31681d8c 100644
--- a/MQTTClient/MQTTClientTests/MQTTTestHelpers.plist
+++ b/MQTTClient/MQTTClientTests/MQTTTestHelpers.plist
@@ -44,6 +44,10 @@
allowUntrustedCertificates
+ CoreData
+
+ persistent
+
localWS