Networking.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. //
  2. // Networking.swift
  3. // JSJP_Student_sw
  4. //
  5. // Created by Ning.ge on 2023/5/30.
  6. //
  7. import Moya
  8. import RxSwift
  9. import Alamofire
  10. typealias CoachNetworking = Networking<CoachAPI>
  11. typealias LoginNetworking = Networking<LoginAPI>
  12. typealias StatisticsNetworking = Networking<StatisticsAPI>
  13. final class Networking<Target: TargetType>: MoyaProvider<Target> {
  14. init(plugins: [PluginType] = [LoadingPlugin()]) {
  15. //安全证书配置DisabledEvaluator 和 host 不能动
  16. let serverTrustManager = ServerTrustManager(evaluators: ["jsjp-admin1.zzxcx.net": DisabledEvaluator()])
  17. let sessionManager: Session = {
  18. let configuration = URLSessionConfiguration.default
  19. configuration.httpAdditionalHeaders = HTTPHeaders.default.dictionary
  20. configuration.timeoutIntervalForRequest = kTimeoutIntervalForRequest
  21. return Session(configuration: configuration, startRequestsImmediately: false,serverTrustManager: serverTrustManager)
  22. }()
  23. super.init(endpointClosure:Networking.endpointMapping, session:sessionManager, plugins:plugins)
  24. }
  25. func request(
  26. _ target: Target,
  27. _ isCache: Bool = false,
  28. file: StaticString = #file,
  29. function: StaticString = #function,
  30. line: UInt = #line
  31. ) -> Single<Response> {
  32. let requestString = "\(target.method) \(target.path)"
  33. return self.rx.request(target)
  34. .filterSuccessfulStatusCodes()
  35. .do(onSuccess: { (value) in
  36. NSLog("do- \(Thread.isMainThread)")
  37. let message = "SUCCESS: \(requestString) (\(value.statusCode))"
  38. log.debug(message, file: file, function: function, line: line)
  39. }, onError: {(error) in
  40. NotificationCenter.post(customNotification: .netError)
  41. if let response = (error as? MoyaError)?.response {
  42. if let jsonObject = try? response.mapJSON(failsOnEmptyData: false) {
  43. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(jsonObject)"
  44. log.warning(message, file: file, function: function, line: line)
  45. } else if let rawString = String(data: response.data, encoding: .utf8) {
  46. let message = "FAILURE: \(requestString) (\(response.statusCode))\n\(rawString)"
  47. log.warning(message, file: file, function: function, line: line)
  48. } else {
  49. let message = "FAILURE: \(requestString) (\(response.statusCode))"
  50. log.warning(message, file: file, function: function, line: line)
  51. }
  52. } else {
  53. let message = "FAILURE: \(requestString)\n\(error)"
  54. log.warning(message, file: file, function: function, line: line)
  55. }
  56. }, onSubscribed: {
  57. let message = "REQUEST: \(requestString)"
  58. log.debug(message, file: file, function: function, line: line)
  59. })
  60. }
  61. private static func endpointMapping<Target: TargetType>(target: Target) -> Endpoint {
  62. var param: [String:Any] = [:]
  63. switch target.task {
  64. case let .requestParameters(parameters, _):
  65. param = parameters
  66. default:break
  67. }
  68. var url = "\(target.baseURL)\(target.path)?"
  69. if target.method == .get {
  70. let s = param.map { (key,value) -> String in
  71. return "\(key)=\(value)&"
  72. }
  73. for p in s {
  74. url += p
  75. }
  76. url.remove(at: String.Index(utf16Offset: url.count - 1, in: url))
  77. log.info("请求链接:\(url) \n 请求方法:\(target.method)")
  78. } else {
  79. log.info("请求链接:\(url) \n 参数:\(param) \n 请求方法:\(target.method)")
  80. }
  81. return MoyaProvider.defaultEndpointMapping(for: target)
  82. }
  83. }