Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- class RequestController: NSObject {
- typealias SuccessBock = ([Any]) -> ()
- typealias ErrorBlock = (NSError) -> ()
- typealias RequestResponseTuple = (con: NSURLConnection, success: SuccessBock?, error: ErrorBlock?)
- var baseURL: String
- private var currentActiveRequests: Dictionary<Int, RequestResponseTuple>
- class var sharedInstance: RequestController {
- struct Singleton {
- static let instance = RequestController(baseURL: "http://localhost:8080/Woingenau")
- }
- return Singleton.instance
- }
- init(baseURL: String) {
- self.baseURL = baseURL
- self.currentActiveRequests = [:]
- }
- func performHttpRequest(method: HTTPRequestMethod, path: String?, parameter:Dictionary<String, String>,
- success:SuccessBock?, error:ErrorBlock?) -> Int {
- var url = NSURL(string: baseURL.stringByAppendingPathComponent((path != nil) ? path! : ""))
- var request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 20.0)
- var con = NSURLConnection(request: request, delegate: self, startImmediately: true)
- var requestId = newRequestId()
- currentActiveRequests[requestId] = RequestResponseTuple(con, success, error)
- return requestId;
- }
- func cancelRequest(requestId: Int) {
- if (currentActiveRequests[requestId] != nil) {
- currentActiveRequests[requestId]!.con.cancel()
- removeRequestFromActiveRequestsDictionary(requestId)
- }
- }
- func removeRequestFromActiveRequestsDictionary(requestId: Int) {
- currentActiveRequests.removeValueForKey(requestId)
- }
- func newRequestId() -> Int {
- var requestId: Int?
- if (currentActiveRequests.count <= Int.max) {
- requestId = currentActiveRequests.count
- } else {
- requestId = -1
- do {
- requestId!++
- } while (currentActiveRequests[requestId!] != nil)
- }
- return requestId!
- }
- func requestIdForNSURLConnection(con: NSURLConnection) -> Int? {
- var requestId: Int? = nil
- if (!currentActiveRequests.isEmpty) {
- var requestIds = currentActiveRequests.keys.array
- var counter = 0
- do {
- if (currentActiveRequests[requestIds[counter]]!.con === con) {
- requestId = requestIds[counter]
- }
- } while (counter < currentActiveRequests.count && requestId != nil)
- }
- return requestId
- }
- func finishRequestWithSuccess(connection: NSURLConnection, response: NSURLResponse) {
- var requestId = requestIdForNSURLConnection(connection)
- println("\(response)")
- currentActiveRequests[requestId!]!.success!([])
- removeRequestFromActiveRequestsDictionary(requestId!)
- }
- func finishRequestWithError(connection: NSURLConnection, didFailWithError error: NSError) {
- var requestId = requestIdForNSURLConnection(connection)
- println("\(error)")
- currentActiveRequests[requestId!]!.error!(error)
- removeRequestFromActiveRequestsDictionary(requestId!)
- }
- }
- extension RequestController: NSURLConnectionDataDelegate {
- func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
- finishRequestWithSuccess(connection, response: response)
- }
- }
- extension RequestController: NSURLConnectionDelegate {
- func connection(connection: NSURLConnection, didFailWithError error: NSError) {
- finishRequestWithError(connection, didFailWithError: error)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement