// // IHWebSocketManager.swift // Inhealth // // Created by weclouds on 2020/3/25. // Copyright © 2020 weclouds. All rights reserved. // import UIKit import AFNetworking import PKHUD class IHWebSocketManager: NSObject { static let manager : IHWebSocketManager = { return IHWebSocketManager() }() class func shareInstance() -> IHWebSocketManager { return manager } var websocket : LMWebSocket? var isReconnect:Bool? = true var connectStatus:((Bool,NSNumber?)->Void)? var connectHandle :((Bool,String?)->Void)? var handle:((Bool)->Void)? var handle2:((Bool,[String:AnyObject]?)->Void)? var clientid : String? = "-1" //初始值 var url : String? var paramters : NSDictionary? var urls : [String]? var paramtersArr : [NSDictionary]? var isSchool : Bool = false var responeHandle :((Int,String,String)->Void)? override init() { super.init() websocket = LMWebSocket.shareInsatance() websocket?.webSocketDelegate = self } //开始连接 func connectSocket() { isReconnect = true // websocket?.connectSever("ws://www.iotena-web.com/wss") websocket?.connectSever("ws://elinker.lampmind.com/wss") } //断开链接 public func disconnectSocket() { websocket?.disconnect() } //school - 设备的各种操作 - 返回websocketId func schoolDeviceOpation(isSchool : Bool,_ responeHandle: @escaping (Int,String,String)->Void) { self.isSchool = isSchool self.responeHandle = responeHandle self.connectSocket() } //调光设置 func connectToSecket(_ urls :[String], parametersArr : [NSDictionary], connectHandle: @escaping ((Bool,String?)->Void),completehandle:@escaping ((Bool,[String:AnyObject]?)->Void)) { self.connectHandle = connectHandle self.handle2 = completehandle self.urls = urls self.paramtersArr = parametersArr self.connectSocket() } //操作硬件 //异步执行 func Post(_ url :String, parameters : NSDictionary,connectStatus: @escaping ((Bool,NSNumber?)->Void),completehandle:@escaping ((Bool)->Void)){ self.connectStatus = connectStatus self.handle = completehandle self.url = url self.paramters = parameters self.connectSocket() } // func contectToSokect(_ url:String,parameter:NSDictionary,completion:@escaping ((Bool)->Void)) { MBPUUHUDHelp.showCustomHudtitle("") // HUD.show(.progress) // //设置20s超时 // HUD.hide(afterDelay: 20) { (isSuccess) in // g_showHUD("Request timeout") // } //connectHandle 链接成功 回掉·;; completehandle 设置成功回调 IHWebSocketManager.shareInstance().connectToSecket( [url], parametersArr: [parameter], connectHandle: { (isSucceess, clientid) in if isSucceess == false { // g_showFail("webSocket connection failed") } }) { (isSuccess, json) in //有结果立即停止 // HUD.hide() MBPUUHUDHelp.hidHud() if isSuccess == true{ // let data = json!["data"] as! [String:Any] let msg = json!["msg"] as! String let code = json!["code"] as! String log.debug("msg -- \(msg)") if code == "0000" { print("调光--设置成功") // g_showHUD(msg ?? "") // HUD.flash(.success, delay: 0.25) HUD.flash(.label(msg), delay: 0.7) { _ in completion(true) } } else { HUD.flash(.label(msg), delay: 0.7) { _ in print("License Obtained.") completion(false) } // g_showHUD(msg ?? "") } }else{ MBPUUHUDHelp.hidHud() //g_showFail("Setting failed") HUD.flash(.label("设置失败"), delay: 0.7) { _ in completion(false) } // completion(false) } } } } //s设置参数 extension IHWebSocketManager{ func PostModbusParameters(_ urls :[String], parametersArr : [NSDictionary],completehandle:@escaping ((Bool)->Void)) { self.handle = completehandle for i in 0..) log.debug("url - \(url)") log.debug("参数 - \(parameters)") manager.requestSerializer = AFHTTPRequestSerializer() manager.responseSerializer = AFHTTPResponseSerializer() manager.post(url, parameters: nil, constructingBodyWith: { (formdata) in for i in 0..Dictionary?{ do{ let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) let dic = json as! Dictionary return dic }catch _ { print("失败") return nil } } func jsonToData(jsonDic:Dictionary) -> Data? { if (!JSONSerialization.isValidJSONObject(jsonDic)) { print("is not a valid json object") return nil } //利用自带的json库转换成Data //如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读 let data = try? JSONSerialization.data(withJSONObject: jsonDic, options: []) //Data转换成String打印输出 let str = String(data:data!, encoding: String.Encoding.utf8) //输出json字符串 print("Json Str:\(str!)") return data } } extension IHWebSocketManager :LMWebSocketDelegeate{ func lm_websocketDidConnct(_ sock: LMWebSocket) { let cmd = "{\"type\":\"cmd\"}" websocket?.writeCmd(cmd) } func lm_websockDidDisconnect(_ sock: LMWebSocket, error: Error?) { log.debug("连接失败呀") if self.isReconnect == true { websocket?.reconnect() log.debug("重新连接") if self.connectStatus != nil { self.connectStatus!(false,nil) } if self.connectHandle != nil { self.connectHandle!(false,nil) } }else{ log.debug("已经完成 - \(self.isReconnect)") } } func lm_websocketDidReceiveMessage(_ socket: LMWebSocket, text: String) { print("IHWebSocketManager - 接收到的数据 ---- \(text)") let dict = SBTEncoder.convertStringToDictionary(text: text) log.debug("dict - \(dict)") let status0 = dict!["code"] as! String log.debug("status0 = \(status0)") // if status0 == "0000" { let data = dict!["data"] as! [String:Any] print(" data- \(dict)") let status = data["status"] as! NSNumber if status == 1 { let clientid = data["clientid"] as! NSNumber self.clientid = "\(clientid)" print(" data- \(self.clientid)") //如果是学校操作的就返回, if isSchool == true{ if self.responeHandle != nil { self.responeHandle!(Int(status),"\(clientid)",status0) return } } if self.connectStatus != nil { self.connectStatus!(true,clientid) let dict = NSMutableDictionary(dictionary: self.paramters!) dict["clientId"] = "\(clientid)" PostModbusParameters(self.url!, parameters: dict) } if self.connectHandle != nil { self.connectHandle!(true,"\(clientid)") if self.paramtersArr!.count > 0 { for i in 0..