IHWebSocketManager.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. //
  2. // IHWebSocketManager.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2020/3/25.
  6. // Copyright © 2020 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import AFNetworking
  10. import PKHUD
  11. class IHWebSocketManager: NSObject {
  12. static let manager : IHWebSocketManager = {
  13. return IHWebSocketManager()
  14. }()
  15. class func shareInstance() -> IHWebSocketManager {
  16. return manager
  17. }
  18. var websocket : LMWebSocket?
  19. var isReconnect:Bool? = true
  20. var connectStatus:((Bool,NSNumber?)->Void)?
  21. var connectHandle :((Bool,String?)->Void)?
  22. var handle:((Bool)->Void)?
  23. var handle2:((Bool,[String:AnyObject]?)->Void)?
  24. var clientid : String? = "-1" //初始值
  25. var url : String?
  26. var paramters : NSDictionary?
  27. var urls : [String]?
  28. var paramtersArr : [NSDictionary]?
  29. var isSchool : Bool = false
  30. var responeHandle :((Int,String,String)->Void)?
  31. override init() {
  32. super.init()
  33. websocket = LMWebSocket.shareInsatance()
  34. websocket?.webSocketDelegate = self
  35. }
  36. //开始连接
  37. func connectSocket() {
  38. isReconnect = true
  39. // websocket?.connectSever("ws://www.iotena-web.com/wss")
  40. websocket?.connectSever("ws://elinker.lampmind.com/wss")
  41. }
  42. //断开链接
  43. public func disconnectSocket() {
  44. websocket?.disconnect()
  45. }
  46. //school - 设备的各种操作 - 返回websocketId
  47. func schoolDeviceOpation(isSchool : Bool,_ responeHandle: @escaping (Int,String,String)->Void) {
  48. self.isSchool = isSchool
  49. self.responeHandle = responeHandle
  50. self.connectSocket()
  51. }
  52. //调光设置
  53. func connectToSecket(_ urls :[String], parametersArr : [NSDictionary], connectHandle: @escaping ((Bool,String?)->Void),completehandle:@escaping ((Bool,[String:AnyObject]?)->Void)) {
  54. self.connectHandle = connectHandle
  55. self.handle2 = completehandle
  56. self.urls = urls
  57. self.paramtersArr = parametersArr
  58. self.connectSocket()
  59. }
  60. //操作硬件 //异步执行
  61. func Post(_ url :String, parameters : NSDictionary,connectStatus: @escaping ((Bool,NSNumber?)->Void),completehandle:@escaping ((Bool)->Void)){
  62. self.connectStatus = connectStatus
  63. self.handle = completehandle
  64. self.url = url
  65. self.paramters = parameters
  66. self.connectSocket()
  67. }
  68. //
  69. func contectToSokect(_ url:String,parameter:NSDictionary,completion:@escaping ((Bool)->Void)) {
  70. MBPUUHUDHelp.showCustomHudtitle("")
  71. // HUD.show(.progress)
  72. // //设置20s超时
  73. // HUD.hide(afterDelay: 20) { (isSuccess) in
  74. // g_showHUD("Request timeout")
  75. // }
  76. //connectHandle 链接成功 回掉·;; completehandle 设置成功回调
  77. IHWebSocketManager.shareInstance().connectToSecket( [url], parametersArr: [parameter], connectHandle: { (isSucceess, clientid) in
  78. if isSucceess == false {
  79. // g_showFail("webSocket connection failed")
  80. }
  81. }) { (isSuccess, json) in
  82. //有结果立即停止
  83. // HUD.hide()
  84. MBPUUHUDHelp.hidHud()
  85. if isSuccess == true{
  86. // let data = json!["data"] as! [String:Any]
  87. let msg = json!["msg"] as! String
  88. let code = json!["code"] as! String
  89. log.debug("msg -- \(msg)")
  90. if code == "0000" {
  91. print("调光--设置成功")
  92. // g_showHUD(msg ?? "")
  93. // HUD.flash(.success, delay: 0.25)
  94. HUD.flash(.label(msg), delay: 0.7) { _ in
  95. completion(true)
  96. }
  97. } else {
  98. HUD.flash(.label(msg), delay: 0.7) { _ in
  99. print("License Obtained.")
  100. completion(false)
  101. }
  102. // g_showHUD(msg ?? "")
  103. }
  104. }else{
  105. MBPUUHUDHelp.hidHud()
  106. //g_showFail("Setting failed")
  107. HUD.flash(.label("设置失败"), delay: 0.7) { _ in
  108. completion(false)
  109. }
  110. // completion(false)
  111. }
  112. }
  113. }
  114. }
  115. //s设置参数
  116. extension IHWebSocketManager{
  117. func PostModbusParameters(_ urls :[String], parametersArr : [NSDictionary],completehandle:@escaping ((Bool)->Void)) {
  118. self.handle = completehandle
  119. for i in 0..<urls.count {
  120. self.PostModbusParameters(urls[i], parameters: parametersArr[i])
  121. }
  122. }
  123. func PostModbusParameters(_ url :String, parameters : NSDictionary) {
  124. let allkey = parameters.allKeys as! [String]
  125. let allvalues = parameters.allValues as! [String]
  126. let manager = AFHTTPSessionManager()
  127. manager.responseSerializer.acceptableContentTypes = (NSSet(objects: "application/json", "text/html", "image/jpeg", "image/png", "application/octet-stream", "text/json") as! Set<String>)
  128. log.debug("url - \(url)")
  129. log.debug("参数 - \(parameters)")
  130. manager.requestSerializer = AFHTTPRequestSerializer()
  131. manager.responseSerializer = AFHTTPResponseSerializer()
  132. manager.post(url, parameters: nil, constructingBodyWith: { (formdata) in
  133. for i in 0..<allkey.count{
  134. let key = allkey[i]
  135. let data = allvalues[i].toData()
  136. formdata.appendPart(withForm: data, name: key)
  137. }
  138. }, progress: nil, success: { (task, respond) in
  139. let json = self.dataToDictionary(data: respond as! Data)
  140. print("--\(json)")
  141. let jsonstr = String(data: respond as! Data, encoding: String.Encoding.utf8)
  142. print("返回的字符串 -- \(jsonstr)")
  143. }) { (task, error) in
  144. print("error - \(error)")
  145. }
  146. }
  147. func dataToDictionary(data:Data) ->Dictionary<String, Any>?{
  148. do{
  149. let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
  150. let dic = json as! Dictionary<String, Any>
  151. return dic
  152. }catch _ {
  153. print("失败")
  154. return nil
  155. }
  156. }
  157. func jsonToData(jsonDic:Dictionary<String, Any>) -> Data? {
  158. if (!JSONSerialization.isValidJSONObject(jsonDic)) {
  159. print("is not a valid json object")
  160. return nil
  161. }
  162. //利用自带的json库转换成Data
  163. //如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读
  164. let data = try? JSONSerialization.data(withJSONObject: jsonDic, options: [])
  165. //Data转换成String打印输出
  166. let str = String(data:data!, encoding: String.Encoding.utf8)
  167. //输出json字符串
  168. print("Json Str:\(str!)")
  169. return data
  170. }
  171. }
  172. extension IHWebSocketManager :LMWebSocketDelegeate{
  173. func lm_websocketDidConnct(_ sock: LMWebSocket) {
  174. let cmd = "{\"type\":\"cmd\"}"
  175. websocket?.writeCmd(cmd)
  176. }
  177. func lm_websockDidDisconnect(_ sock: LMWebSocket, error: Error?) {
  178. log.debug("连接失败呀")
  179. if self.isReconnect == true {
  180. websocket?.reconnect()
  181. log.debug("重新连接")
  182. if self.connectStatus != nil {
  183. self.connectStatus!(false,nil)
  184. }
  185. if self.connectHandle != nil {
  186. self.connectHandle!(false,nil)
  187. }
  188. }else{
  189. log.debug("已经完成 - \(self.isReconnect)")
  190. }
  191. }
  192. func lm_websocketDidReceiveMessage(_ socket: LMWebSocket, text: String) {
  193. print("IHWebSocketManager - 接收到的数据 ---- \(text)")
  194. let dict = SBTEncoder.convertStringToDictionary(text: text)
  195. log.debug("dict - \(dict)")
  196. let status0 = dict!["code"] as! String
  197. log.debug("status0 = \(status0)")
  198. // if status0 == "0000" {
  199. let data = dict!["data"] as! [String:Any]
  200. print(" data- \(dict)")
  201. let status = data["status"] as! NSNumber
  202. if status == 1 {
  203. let clientid = data["clientid"] as! NSNumber
  204. self.clientid = "\(clientid)"
  205. print(" data- \(self.clientid)")
  206. //如果是学校操作的就返回,
  207. if isSchool == true{
  208. if self.responeHandle != nil {
  209. self.responeHandle!(Int(status),"\(clientid)",status0)
  210. return
  211. }
  212. }
  213. if self.connectStatus != nil {
  214. self.connectStatus!(true,clientid)
  215. let dict = NSMutableDictionary(dictionary: self.paramters!)
  216. dict["clientId"] = "\(clientid)"
  217. PostModbusParameters(self.url!, parameters: dict)
  218. }
  219. if self.connectHandle != nil {
  220. self.connectHandle!(true,"\(clientid)")
  221. if self.paramtersArr!.count > 0 {
  222. for i in 0..<self.paramtersArr!.count {
  223. let paramter = self.paramtersArr![i]
  224. let dict = NSMutableDictionary(dictionary: paramter)
  225. dict["clientId"] = "\(clientid)"
  226. PostModbusParameters(self.urls![i], parameters: dict)
  227. }
  228. }
  229. }
  230. }else if status == 2{
  231. //设置完成
  232. let msg = dict!["msg"] as! String
  233. print(" msg- \(msg)")
  234. if self.handle != nil {
  235. self.handle!(true)
  236. self.disconnectSocket()
  237. self.isReconnect = false
  238. }
  239. if self.handle2 != nil {
  240. self.handle2!(true, dict)
  241. self.disconnectSocket()
  242. self.isReconnect = false
  243. }
  244. //如果是学校操作的就返回,
  245. if isSchool == true{
  246. if self.responeHandle != nil {
  247. self.responeHandle!(Int(status),msg,status0)
  248. self.isSchool = false
  249. return
  250. }
  251. }
  252. }
  253. }
  254. func lm_websocketDidReceiveData(_ socket: LMWebSocket, data: Data) {
  255. }
  256. }