TSNetWork+Business.swift 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //
  2. // TSNetWork+Business.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/1/16.
  6. //
  7. /// 基础 URL(根据需求修改)
  8. private let baseURL = "http://ai.100yearslater.com"
  9. import Alamofire
  10. enum TSNeURLType:String {
  11. case imageEmoji = "/api/image/emoji" //文生emoji
  12. case actionInfo = "/api/action/info" //查询生成过程接口
  13. case chat = "/api/text/chat" //AI 对话接口
  14. case textPicCreate = "/api/image/create" //文生图
  15. case upload = "/api/upload" //上传图片
  16. case imageRewrite = "/api/image/rewrite" //图生图
  17. case themes = "/api/ops/themes" //主体查询
  18. case musicCreate = "/api/music/create" //铃声创建
  19. func getUrlString() -> String {
  20. return baseURL + self.rawValue
  21. }
  22. }
  23. extension TSNetworkManager {
  24. /// 通用 get 请求
  25. func get<T: TSBaseModel>(
  26. urlType: TSNeURLType,
  27. parameters: [String: Any]? = nil,
  28. responseType: T.Type? = nil,
  29. useCache: Bool = false,
  30. completion: @escaping (Result<Any, Error>) -> Void
  31. ) -> Request? {
  32. let urlString = urlType.getUrlString()
  33. return request(
  34. method: .get,
  35. urlString: urlString,
  36. parameters:parameters,
  37. useCache: useCache
  38. ) { result in
  39. completion(result)
  40. }
  41. }
  42. /// 通用 POST 请求
  43. /// - Parameters:
  44. /// - endpoint: 接口路径
  45. /// - parameters: 请求参数
  46. /// - responseType: 响应数据模型(可选)
  47. /// - completion: 请求完成的回调
  48. func post<T: TSBaseModel>(
  49. urlType: TSNeURLType,
  50. parameters: [String: Any]? = nil,
  51. responseType: T.Type? = nil,
  52. useCache: Bool = false,
  53. completion: @escaping (Result<Any, Error>) -> Void
  54. ) -> Request? {
  55. let urlString = urlType.getUrlString()
  56. return request(
  57. method: .post,
  58. urlString: urlString,
  59. parameters:parameters,
  60. useCache: useCache
  61. ) { result in
  62. completion(result)
  63. }
  64. }
  65. /// 清除特定 URL 的缓存
  66. func removeCache(urlType: TSNeURLType) {
  67. removeCache(urlString: urlType.getUrlString())
  68. }
  69. // /// 通用 POST Stream 请求
  70. // /// - Parameters:
  71. // /// - endpoint: 接口路径
  72. // /// - parameters: 请求参数
  73. // /// - responseType: 响应数据模型(可选)
  74. // /// - completion: 请求完成的回调
  75. // func postStream<T: TSBaseModel>(
  76. // urlType: TSNeURLType,
  77. // parameters: [String: Any]? = nil,
  78. // responseType: T.Type? = nil,
  79. // streamHandler:@escaping (String) -> Void,
  80. // completion: @escaping (Result<Any, Error>) -> Void
  81. // ) -> StreamPostRequest{
  82. // let urlString = urlType.getUrlString()
  83. //
  84. // let streamRequest = StreamPostRequest(url: URL(string: urlString)!, parameters: parameters) { data in
  85. // if let string = String(data: data, encoding: .utf8) {
  86. // print("Received chunk: \(string)")
  87. // streamHandler(string)
  88. // }
  89. // } completionHandler: { error in
  90. // if let error = error {
  91. // print("Request failed with error: \(error)")
  92. // completion(.failure(error))
  93. // } else {
  94. // print("Request completed successfully.")
  95. // completion(.success("success"))
  96. // }
  97. // }
  98. // streamRequest.startRequest()
  99. // return streamRequest
  100. // }
  101. /// 通用 POST Stream 请求
  102. /// - Parameters:
  103. /// - endpoint: 接口路径
  104. /// - parameters: 请求参数
  105. /// - responseType: 响应数据模型(可选)
  106. /// - completion: 请求完成的回调
  107. func postStream<T: TSBaseModel>(
  108. urlType: TSNeURLType,
  109. parameters: [String: Any]? = nil,
  110. responseType: T.Type? = nil,
  111. streamHandler:@escaping (String) -> Void,
  112. completion: @escaping (Result<Any, Error>) -> Void
  113. ) -> Request?{
  114. let urlString = urlType.getUrlString()
  115. let streamRequest = postStreamRequest(
  116. urlString: urlString,
  117. parameters: parameters,
  118. streamHandler: streamHandler,
  119. completion: completion
  120. )
  121. return streamRequest
  122. }
  123. /// 上传多个 Data 数据
  124. /// - Parameters:
  125. /// - urlType: TSNeURLType
  126. /// - dataArray: Data 数组,每个元素是一个字典,包含 Data 和字段名
  127. /// - parameters: 其他参数(可选)
  128. /// - headers: 自定义请求头(可选)
  129. /// - completion: 完成回调,返回结果或错误
  130. func uploadData<T: TSBaseModel>(
  131. urlType: TSNeURLType,
  132. dataArray: [[String: Any]], // Data 数组,每个元素包含 Data 和字段名
  133. parameters: [String: Any]? = nil,
  134. responseType: T.Type? = nil,
  135. progressHandler: @escaping (Float) -> Void, // 上传进度回调
  136. completion: @escaping (Result<Any, Error>) -> Void
  137. ) -> Request?{
  138. let urlString = urlType.getUrlString()
  139. let request = uploadData(urlString: urlString,dataArray:dataArray, parameters: parameters, progressHandler: { progress in
  140. progressHandler(Float(progress.fractionCompleted))
  141. },completion: completion)
  142. return request
  143. }
  144. }
  145. extension TSNetworkManager {
  146. func startListenNetStatus(handler: @escaping (NetworkReachabilityManager.NetworkReachabilityStatus, NetworkReachabilityManager?) -> Void) {
  147. // 创建 NetworkReachabilityManager 实例
  148. let networkManager = NetworkReachabilityManager.default
  149. // 开始监听网络状态
  150. networkManager?.startListening { status in
  151. handler(status, networkManager)
  152. }
  153. }
  154. }