result callbacks now execute on the main thread; fixed logic error with logout

This commit is contained in:
Peter 2015-11-07 14:03:09 -05:00
parent c274ee6ec9
commit dee0aaf38e
2 changed files with 18 additions and 12 deletions

View File

@ -189,7 +189,7 @@ public class DDPClient: NSObject {
self.connection = (true, message.session!)
self.events.onConnected(session:message.session!)
case .Result: incomingData.addOperationWithBlock() {
case .Result: NSOperationQueue.mainQueue().addOperationWithBlock() {
if let id = message.id, // Message has id
let callback = self.resultCallbacks[id], // There is a callback registered for the message
let result = message.result {

View File

@ -257,6 +257,7 @@ extension DDPClient {
self.userData.setObject(token, forKey: DDP_TOKEN)
self.userData.setObject(expiration, forKey: DDP_TOKEN_EXPIRES)
}
if let c = callback { c(result:result, error:error) }
self.userData.setObject(true, forKey: DDP_LOGGED_IN)
return
@ -289,6 +290,7 @@ extension DDPClient {
public func loginWithToken(callback: DDPMethodCallback?) -> Bool {
if let token = userData.stringForKey(DDP_TOKEN),
let tokenDate = userData.objectForKey(DDP_TOKEN_EXPIRES) {
print("Found token & token expires \(token), \(tokenDate)")
if (tokenDate.compare(NSDate()) == NSComparisonResult.OrderedDescending) {
let params = ["resume":token] as NSDictionary
login(params, callback:callback)
@ -361,16 +363,7 @@ extension DDPClient {
Logs a user out and removes their account data from NSUserDefaults
*/
public func logout() {
method("logout", params: nil) { result, error in
if (error == nil) {
self.userData.setObject(false, forKey: DDP_LOGGED_IN)
self.userData.removeObjectForKey(DDP_ID)
self.userData.removeObjectForKey(DDP_EMAIL)
self.userData.removeObjectForKey(DDP_USERNAME)
self.userData.removeObjectForKey(DDP_TOKEN)
self.userData.removeObjectForKey(DDP_TOKEN_EXPIRES)
}
}
logout(nil)
}
/**
@ -379,7 +372,20 @@ extension DDPClient {
- parameter callback: A closure with result and error parameters describing the outcome of the operation
*/
public func logout(callback:DDPMethodCallback?) {
method("logout", params: nil, callback: callback)
method("logout", params: nil) { result, error in
if (error == nil) {
self.userData.setObject(false, forKey: DDP_LOGGED_IN)
self.userData.removeObjectForKey(DDP_ID)
self.userData.removeObjectForKey(DDP_EMAIL)
self.userData.removeObjectForKey(DDP_USERNAME)
self.userData.removeObjectForKey(DDP_TOKEN)
self.userData.removeObjectForKey(DDP_TOKEN_EXPIRES)
self.userData.synchronize()
} else {
log.error("\(error)")
}
if let c = callback { c(result: result, error: error) }
}
}
/**