Skip to content

Commit

Permalink
[FIX] save persistent data to disk closes #137 #117
Browse files Browse the repository at this point in the history
  • Loading branch information
Christoph Krey committed May 11, 2016
1 parent dd515c9 commit 9786201
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 44 deletions.
4 changes: 2 additions & 2 deletions MQTTClient.podspec
Original file line number Diff line number Diff line change
@@ -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" => "[email protected]" }
mqttc.source = {
:git => "https://github.com/ckrey/MQTT-Client-Framework.git",
:tag => "0.7.4",
:tag => "0.7.5",
:submodules => true
}

Expand Down
86 changes: 44 additions & 42 deletions MQTTClient/MQTTClient/MQTTCoreDataPersistence.m
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
21 changes: 21 additions & 0 deletions MQTTClient/MQTTClientTests/MQTTClientPublishTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions MQTTClient/MQTTClientTests/MQTTTestHelpers.plist
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
<false/>
<key>allowUntrustedCertificates</key>
<false/>
<key>CoreData</key>
<true/>
<key>persistent</key>
<true/>
</dict>
<key>localWS</key>
<dict>
Expand Down

0 comments on commit 9786201

Please sign in to comment.