我有一个实用程序类来处理套接字,并且在套接字委托方法中我可以知道套接字的当前状态,例如 didConnected、didReadData 等。我不想用委托编写额外的协议来发送套接字状态。
实际上,我的实用程序类中有 2 个属性,一个用于区分套接字当前状态的枚举:didConnected、didReadData、didDisconnected,另一个是一个数据类型值,用于存储从套接字接收到的数据。它喜欢这样:
public enum SocketState {
case unknown, didConnected, didReconnectedFailed, didSentHeartbeatPack,
didSentMessage, didReadData, didDisconnected
}
private var currentState: SocketState = .unknown
private var msgData = Data()
成为套接字的代表后,我实现了几个方法,
func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {}
func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {}
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {}
我打算做的是当我更改currentState的值,或者我确实将接收到的数据设置为msgData时,在我的控制器中我可以捕获同时更改的2 个值。