123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- //
- // 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..<urls.count {
- self.PostModbusParameters(urls[i], parameters: parametersArr[i])
- }
- }
-
- func PostModbusParameters(_ url :String, parameters : NSDictionary) {
- let allkey = parameters.allKeys as! [String]
- let allvalues = parameters.allValues as! [String]
- let manager = AFHTTPSessionManager()
- manager.responseSerializer.acceptableContentTypes = (NSSet(objects: "application/json", "text/html", "image/jpeg", "image/png", "application/octet-stream", "text/json") as! Set<String>)
- 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..<allkey.count{
- let key = allkey[i]
- let data = allvalues[i].toData()
- formdata.appendPart(withForm: data, name: key)
- }
-
- }, progress: nil, success: { (task, respond) in
- let json = self.dataToDictionary(data: respond as! Data)
- print("--\(json)")
- let jsonstr = String(data: respond as! Data, encoding: String.Encoding.utf8)
- print("返回的字符串 -- \(jsonstr)")
- }) { (task, error) in
- print("error - \(error)")
- }
-
- }
- func dataToDictionary(data:Data) ->Dictionary<String, Any>?{
- do{
- let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
- let dic = json as! Dictionary<String, Any>
- return dic
- }catch _ {
- print("失败")
- return nil
- }
- }
- func jsonToData(jsonDic:Dictionary<String, Any>) -> 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..<self.paramtersArr!.count {
- let paramter = self.paramtersArr![i]
- let dict = NSMutableDictionary(dictionary: paramter)
- dict["clientId"] = "\(clientid)"
- PostModbusParameters(self.urls![i], parameters: dict)
- }
- }
- }
- }else if status == 2{
- //设置完成
- let msg = dict!["msg"] as! String
- print(" msg- \(msg)")
- if self.handle != nil {
- self.handle!(true)
- self.disconnectSocket()
- self.isReconnect = false
- }
- if self.handle2 != nil {
- self.handle2!(true, dict)
- self.disconnectSocket()
- self.isReconnect = false
- }
-
- //如果是学校操作的就返回,
- if isSchool == true{
- if self.responeHandle != nil {
- self.responeHandle!(Int(status),msg,status0)
- self.isSchool = false
- return
- }
- }
- }
- }
-
- func lm_websocketDidReceiveData(_ socket: LMWebSocket, data: Data) {
-
- }
- }
|