// // LMWebSocket.swift // LampMind // // Created by weclouds on 2019/8/5. // Copyright © 2019 weclouds. All rights reserved. // import UIKit import Starscream @objc protocol LMWebSocketDelegeate : NSObjectProtocol{ /** websocket 连接成功*/ @objc optional func lm_websocketDidConnct(_ sock:LMWebSocket) /** websocket 断开连接*/ @objc optional func lm_websockDidDisconnect(_ sock:LMWebSocket,error:Error?) /**接受文字信息*/ @objc optional func lm_websocketDidReceiveMessage(_ socket:LMWebSocket,text:String) /** 接收二进制信息*/ @objc optional func lm_websocketDidReceiveData(_ socket: LMWebSocket,data:Data) } class LMWebSocket: NSObject ,WebSocketDelegate{ var socket : WebSocket? weak var webSocketDelegate :LMWebSocketDelegeate? //单例 class func shareInsatance() -> LMWebSocket { return manager } static let manager : LMWebSocket = { return LMWebSocket() }() //连接服务器 func connectSever(_ url:String) { socket = WebSocket(url: URL(string: url)!) socket?.delegate = self socket?.connect() } //写入指令 func writeCmd(_ cmd:String) { socket?.write(string: cmd, completion: { log.debug("写入成功") }) } func reconnect() { socket?.connect() } //发送文字消息 func sendBrandStr(_ brandID: String) { socket?.write(string: brandID) } //MARK :关闭消息 func disconnect() { socket?.disconnect() } func websocketDidConnect(socket: WebSocketClient) { log.debug("成功连接了 --- \(socket)") webSocketDelegate?.lm_websocketDidConnct?(self) } func websocketDidDisconnect(socket: WebSocketClient, error: Error?) { log.debug("断开连接了 --- \(socket) ,error --\(error.debugDescription)") disconnect() if webSocketDelegate != nil && (webSocketDelegate?.responds(to: #selector(LMWebSocketDelegeate.lm_websockDidDisconnect(_:error:)))) == true { webSocketDelegate?.lm_websockDidDisconnect?(self, error: error) } } func websocketDidReceiveMessage(socket: WebSocketClient, text: String) { log.debug("LMWebSocket - 接收到的信息-- \(text)") webSocketDelegate?.lm_websocketDidReceiveMessage?(self, text: text) } func websocketDidReceiveData(socket: WebSocketClient, data: Data) { log.debug("接收到二进制数据 ----\(data)") webSocketDelegate?.lm_websocketDidReceiveData?(self, data: data) } }