Advertisement
Guest User

RequestController.swift

a guest
Jan 13th, 2015
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.76 KB | None | 0 0
  1. import Foundation
  2.  
  3. class RequestController: NSObject {
  4.  
  5. typealias SuccessBock = ([Any]) -> ()
  6. typealias ErrorBlock = (NSError) -> ()
  7. typealias RequestResponseTuple = (con: NSURLConnection, success: SuccessBock?, error: ErrorBlock?)
  8.  
  9. var baseURL: String
  10. private var currentActiveRequests: Dictionary<Int, RequestResponseTuple>
  11.  
  12. class var sharedInstance: RequestController {
  13. struct Singleton {
  14. static let instance = RequestController(baseURL: "http://localhost:8080/Woingenau")
  15. }
  16. return Singleton.instance
  17. }
  18.  
  19. init(baseURL: String) {
  20. self.baseURL = baseURL
  21. self.currentActiveRequests = [:]
  22. }
  23.  
  24. func performHttpRequest(method: HTTPRequestMethod, path: String?, parameter:Dictionary<String, String>,
  25. success:SuccessBock?, error:ErrorBlock?) -> Int {
  26. var url = NSURL(string: baseURL.stringByAppendingPathComponent((path != nil) ? path! : ""))
  27. var request = NSURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 20.0)
  28. var con = NSURLConnection(request: request, delegate: self, startImmediately: true)
  29. var requestId = newRequestId()
  30. currentActiveRequests[requestId] = RequestResponseTuple(con, success, error)
  31. return requestId;
  32. }
  33.  
  34. func cancelRequest(requestId: Int) {
  35. if (currentActiveRequests[requestId] != nil) {
  36. currentActiveRequests[requestId]!.con.cancel()
  37. removeRequestFromActiveRequestsDictionary(requestId)
  38. }
  39. }
  40.  
  41. func removeRequestFromActiveRequestsDictionary(requestId: Int) {
  42. currentActiveRequests.removeValueForKey(requestId)
  43. }
  44.  
  45. func newRequestId() -> Int {
  46. var requestId: Int?
  47. if (currentActiveRequests.count <= Int.max) {
  48. requestId = currentActiveRequests.count
  49. } else {
  50. requestId = -1
  51. do {
  52. requestId!++
  53. } while (currentActiveRequests[requestId!] != nil)
  54. }
  55. return requestId!
  56. }
  57.  
  58. func requestIdForNSURLConnection(con: NSURLConnection) -> Int? {
  59. var requestId: Int? = nil
  60. if (!currentActiveRequests.isEmpty) {
  61. var requestIds = currentActiveRequests.keys.array
  62. var counter = 0
  63. do {
  64. if (currentActiveRequests[requestIds[counter]]!.con === con) {
  65. requestId = requestIds[counter]
  66. }
  67. } while (counter < currentActiveRequests.count && requestId != nil)
  68. }
  69. return requestId
  70. }
  71.  
  72. func finishRequestWithSuccess(connection: NSURLConnection, response: NSURLResponse) {
  73. var requestId = requestIdForNSURLConnection(connection)
  74. println("\(response)")
  75. currentActiveRequests[requestId!]!.success!([])
  76. removeRequestFromActiveRequestsDictionary(requestId!)
  77. }
  78.  
  79. func finishRequestWithError(connection: NSURLConnection, didFailWithError error: NSError) {
  80. var requestId = requestIdForNSURLConnection(connection)
  81. println("\(error)")
  82. currentActiveRequests[requestId!]!.error!(error)
  83. removeRequestFromActiveRequestsDictionary(requestId!)
  84. }
  85.  
  86. }
  87.  
  88. extension RequestController: NSURLConnectionDataDelegate {
  89.  
  90. func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
  91. finishRequestWithSuccess(connection, response: response)
  92. }
  93.  
  94. }
  95.  
  96. extension RequestController: NSURLConnectionDelegate {
  97.  
  98. func connection(connection: NSURLConnection, didFailWithError error: NSError) {
  99. finishRequestWithError(connection, didFailWithError: error)
  100. }
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement