Networking.swift 4.2 KB

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