I need direction (or an example) for the 3 questions in the following snippet. Please can you help?
import Foundation
import NIO
import NIOFoundationCompat
class NetworkService {
var connected = false
// Q1 Are these declarations correct?
var group: MultiThreadedEventLoopGroup
var bootstrap: ClientBootstrap
var channel: Channel?
init() {
self.group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
self.bootstrap = ClientBootstrap(group: group)
.channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
.channelInitializer { channel in
channel.pipeline.addHandler(ResponseHandler())
}
defer {
try! self.group.syncShutdownGracefully()
}
}
public func connect(host: String, port: Int, completion: (_ success:Bool, _ error:String) -> Void) {
if connected {
completion(false, "ERROR: already connected")
return
}
do {
// Q2 How to change to the correct thread - and return to main?
channel = try bootstrap.connect(host: host, port: port).wait()
} catch {
completion(false, "ERROR: NetworkService.connect() failed to connect")
connected = false
return
}
connected = true
completion(true, "")
}
public func disconnect(completion: (_ success:Bool, _ error:String) -> Void) {
if !connected {
completion(false, "ERROR: already disconnected")
return
}
do {
// Q3 How to change to the correct thread - and return to main?
try channel?.close().wait()
} catch {
completion(false, "ERROR: NetworkService.disconnect() failed to disconnect")
return
}
connected = false
completion(true, "")
}
//
// more follows...
//
Of course, any other suggestions will be most appreciated. Thank you.