Я собираюсь реализовать синхронизирующий или асинхронный клиент сокетов Swift с GCDAsyncSocket.
Вот пример реализации асинхронного режима с помощью GCDAsyncSocket.
class TestAsyncSocket: NSObject, GCDAsyncSocketDelegate{
func startSocket(){
mAsyncSocket = GCDAsyncSocket.init(delegate: self, delegateQueue: DispatchQueue.main)
do {
try mAsyncSocket?.connect(toHost: hostURL, onPort: port)
} catch {
print("Failed to connect")
}
}
func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
print("DidConnectToHost: %@ port: %@", host, port)
}
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
print("DisConnect to host: %@", err ?? hostURL)
}
func sendData(cmdJson: Data) {
mAsyncSocket.write(cmdJson, withTimeout: -1, tag: 0)
mAsyncSocket.readData(withTimeout: -1, tag: 0)
}
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
let dataString = String.init(data: data, encoding: String.Encoding.utf8)
print("Received Data on Socket =====>", dataString ?? "")
}
Некоторые экземпляры сокетов должны работать какрежим синхронизации, но другие должны быть в асинхронном режиме.
Можете ли вы посоветовать, как я могу реализовать оба режима синхронизации и асинхронного?