From 901397ffe83cbf1aed01e6a77e00db57e9440dac Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Thu, 25 Jul 2024 12:13:51 +0100 Subject: Receiving ADSB stream from dump1090 works in LearnMapKit --- Net1090/NetADSBDecoder.swift | 69 ++++++++++++++++++++++++++++++++++++++++++++ Net1090/main.swift | 59 +------------------------------------ 2 files changed, 70 insertions(+), 58 deletions(-) create mode 100644 Net1090/NetADSBDecoder.swift (limited to 'Net1090') diff --git a/Net1090/NetADSBDecoder.swift b/Net1090/NetADSBDecoder.swift new file mode 100644 index 0000000..065bf91 --- /dev/null +++ b/Net1090/NetADSBDecoder.swift @@ -0,0 +1,69 @@ +// +// 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") + } +} diff --git a/Net1090/main.swift b/Net1090/main.swift index 04d0384..d142613 100644 --- a/Net1090/main.swift +++ b/Net1090/main.swift @@ -10,69 +10,12 @@ 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) +let ADSBClient = NetADSBDecoder(host: "192.168.4.201", port: 30002) do { try ADSBClient.start() } catch let error { -- cgit v1.2.3