// // main.swift // Net1090 // // Created by Jacky Jack on 11/07/2024. // import Foundation import Network import NIO class ADSBHandlder: ChannelInboundHandler { typealias InboundIn = ByteBuffer typealias OutboundOut = ByteBuffer func channelActive(context: ChannelHandlerContext) { print("Channel is active") } func channelRead(context: ChannelHandlerContext, data: NIOAny) { var buffer = unwrapInboundIn(data) let readableBytes = buffer.readableBytes if let received = buffer.readString(length: readableBytes) { print(received,terminator: "") } } func errorCaught(context: ChannelHandlerContext, error: any Error) { print("error: \(error.localizedDescription)") context.close(promise: nil) } } class TCPClient { let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) var host: String var port: Int init(host: String, port: Int) { self.host = host self.port = port } func start() throws { do { let channel = try ClientBootstrap(group: group) .channelOption(ChannelOptions.socket(SocketOptionLevel(SOL_SOCKET), SO_REUSEADDR), value: 1) .channelInitializer{channel in //channel.pipeline.add(handler: ADSBHandlder()) channel.pipeline.addHandlers([ADSBHandlder()]) }.connect(host: self.host, port: self.port) .wait() try channel.closeFuture.wait() } catch let error { print(error) throw error } } func stop() { do { try group.syncShutdownGracefully() } catch let error { print("Error shutting down \(error.localizedDescription)") exit(0) } print("Connection closed") } } print("Hello, World!") print("Start listening client") let ADSBClient = TCPClient(host: "192.168.4.201", port: 30002) do { try ADSBClient.start() } catch let error { print("Error: \(error.localizedDescription)") ADSBClient.stop() }