Skip to content

Instantly share code, notes, and snippets.

@arashkashi
Created June 28, 2016 08:56
Show Gist options
  • Save arashkashi/5f080b03bed9ce6fede8087294b19524 to your computer and use it in GitHub Desktop.
Save arashkashi/5f080b03bed9ce6fede8087294b19524 to your computer and use it in GitHub Desktop.
//: Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"
struct Token {
var value: String
func isValid() -> Token? {
return self
}
}
typealias TokenRequestCallback = Token? -> Void
class AuthManager {
private var listOfTokenRequests: [TokenRequestCallback] = []
private var isFetchingNewTokenFromNetwork: Bool = false
private var currentToken: Token?
private func refreshToken(completion: Token -> Void ) {
fatalError("To be implemented")
}
private func getValidToken(completion: TokenRequestCallback) {
if self.isFetchingNewTokenFromNetwork { return }
if let validToken = self.currentToken?.isValid() {
completion(validToken)
} else {
self.refreshToken{ refreshedToken in
self.isFetchingNewTokenFromNetwork = false
self.currentToken = refreshedToken
completion(refreshedToken)
}
self.isFetchingNewTokenFromNetwork = true
}
}
internal func onAskingForToken(handler: TokenRequestCallback) {
dispatch_sync(dispatch_get_main_queue()) {
self.listOfTokenRequests.append(handler)
self.getValidToken { token in
self.listOfTokenRequests.map { $0(token) }
self.listOfTokenRequests.removeAll()
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment