// // NetADSBDecoder.swift // Net1090 // // Created by Jacky Jack on 19/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 NetADSBDecoder { 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") } }