Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- import SwiftHTTP
- class HttpClient {
- enum METHOD: String {
- case GET = "GET"
- case POST = "POST"
- case UPLOAD = "UPLOAD"
- case DOWNLOAD = "DOWNLOAD"
- case DELETE = "DELETE"
- case PUT = "PUT"
- }
- enum ErrorCode: Int {
- case OK = 0
- case MissingAccessToken = 1
- case InvalidAccessToken = 2
- case InvalidEmailOrPassword = 11
- case InvalidParams = 12
- case FacebookUserNotRegistered = 13
- case InvalidFacebookToken = 14
- case UserWasStopped = 15
- // case UserNotFound = 15
- case UserTokenExpired = 16
- case Failure = 0x8000000
- func toString() -> String {
- switch self {
- case .OK: return "OK"
- case .MissingAccessToken: return "MISSING_ACCESS_TOKEN"
- case .InvalidAccessToken: return "INVALID_ACCESS_TOKEN"
- case .InvalidEmailOrPassword: return "INVALID_EMAIL_OR_PASSWORD"
- case .InvalidParams: return "INVALID_PARAMS"
- case .FacebookUserNotRegistered: return "FACEBOOK_USER_NOT_REGISTERED"
- default: return "UNKNOWN_ERROR"
- }
- }
- }
- typealias Completion = (_ result: String?, _ errorCode: ErrorCode?) -> ()
- enum API: String {
- case Login = "login"
- case Events = "events"
- case Companies = "companies"
- case Messages = "messages"
- case MyPage = "mypage"
- case Profile = "profile"
- case AccessToken = "access_token"
- case CheckIn = "event/checkin"
- case Resume = "resume"
- case EditResume = "edit_resume"
- case MessageDetail = "message_detail"
- case JobDetail = "job_detail"
- case Account = "account"
- case Total_Unread_Message = "total_unread_messages"
- case Schedule = "schedule"
- case Interview = "interview"
- case CompanyDetail = "company_detail"
- }
- private let BaseURL = "https://example.com/"
- private let headers = [
- "Authorization": "Basic ZGlzY286RFNrczNQNktLdXZieGR1cA==",
- "Content-Type": "application/json"
- ]
- private var defaultParameters = [String: Any]()
- private let serializer = JSONParameterSerializer()
- static let shared = HttpClient()
- func addDefaultParameter(_ key: String, _ value: Any) {
- defaultParameters[key] = value
- }
- func request(method: METHOD, api: API, params: Dictionary<String, Any>? = nil, completion: Completion? = nil) {
- var requestParams = defaultParameters
- if let p = params {
- requestParams.merge(with: p)
- }
- LOG(#function, #line, "method: \(method) - params: \(requestParams)")
- switch method {
- case .GET:
- GET(api: api, params: requestParams, completion: completion)
- default:
- POST(api: api, params: requestParams, completion: completion)
- }
- }
- private func GET(api: API, params: Dictionary<String, Any>? = nil, completion: Completion? = nil) {
- do {
- let opt = try HTTP.GET(BaseURL + api.rawValue, parameters: params, headers: headers, requestSerializer: serializer)
- startQuery(query: opt, completion: completion)
- } catch _ {
- if let callback = completion {
- callback(nil, .Failure)
- }
- }
- }
- private func POST(api: API, params: Dictionary<String, Any>? = nil, completion: Completion? = nil) {
- do {
- let opt = try HTTP.POST(BaseURL + api.rawValue, parameters: params, headers: headers, requestSerializer: serializer)
- startQuery(query: opt, completion: completion)
- } catch _ {
- if let callback = completion {
- callback(nil, .Failure)
- }
- }
- }
- private func startQuery(query: HTTP, completion: Completion? = nil) {
- var attempted = false
- query.auth = { challenge in
- if let trust = challenge.protectionSpace.serverTrust , !attempted {
- attempted = true
- return URLCredential(trust: trust)
- }
- return nil
- }
- query.start { response in
- var result: String?
- var errorCode: ErrorCode?
- if let error = response.error {
- errorCode = ErrorCode(rawValue: error.code)
- if errorCode == nil {
- errorCode = ErrorCode.Failure
- }
- } else {
- result = String(data: response.data, encoding: .utf8)
- errorCode = .OK
- }
- if let callback = completion {
- LOG(#function, #line, "errorCode: \(errorCode)")
- callback(result, errorCode)
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment