From dd31184b900636214897a1a08026279390049b92 Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Wed, 9 Sep 2026 16:47:05 +0100 Subject: queues are now have guardlocks --- Net1090/NetADSBDecoder.swift | 35 +++++++++++++++++++++++++++++------ Net1090/main.swift | 13 ++++--------- 2 files changed, 33 insertions(+), 15 deletions(-) (limited to 'Net1090') diff --git a/Net1090/NetADSBDecoder.swift b/Net1090/NetADSBDecoder.swift index 335a303..36277ee 100644 --- a/Net1090/NetADSBDecoder.swift +++ b/Net1090/NetADSBDecoder.swift @@ -10,7 +10,9 @@ import Network import NIO protocol ADSBQueueDelegate: AnyObject { - var message_array:Array {get set} + //var message_array:Array {get set} + func push(_ message: String) + func pop() -> String? } class NetADSBHandlder: ChannelInboundHandler { @@ -40,15 +42,16 @@ class NetADSBHandlder: ChannelInboundHandler { if self.messageDelegate != nil { if received.count == 17 { let trimmed = received.trimmingCharacters(in: .newlines).lowercased() - messageDelegate?.message_array.append(String(trimmed)) + //messageDelegate?.message_array.append(String(trimmed)) + messageDelegate?.push(String(trimmed)) } else if received.count == 31 { let trimmed = received.trimmingCharacters(in: .newlines).lowercased() - messageDelegate?.message_array.append(String(trimmed)) + messageDelegate?.push(String(trimmed)) } else { for line in received.components(separatedBy: .newlines) { let trimmed = line.trimmingCharacters(in: .newlines).lowercased() - messageDelegate?.message_array.append(String(trimmed)) + messageDelegate?.push(String(trimmed)) } } } @@ -61,8 +64,28 @@ class NetADSBHandlder: ChannelInboundHandler { } } -class ADSBQueue: ADSBQueueDelegate { - var message_array:Array = [] +final class ADSBQueue: ADSBQueueDelegate { + private var message_array:Array = [] + private let lock = NSLock() + + func push(_ message: String) { + lock.lock() + message_array.append(message) + lock.unlock() + } + + func pop() -> String? { + lock.lock() + defer { lock.unlock() } + guard !message_array.isEmpty else { return nil } + return message_array.removeFirst() + } + + var count: Int { + lock.lock() + defer { lock.unlock() } + return message_array.count + } } class NetADSBDecoder { diff --git a/Net1090/main.swift b/Net1090/main.swift index 2620dca..deeae31 100644 --- a/Net1090/main.swift +++ b/Net1090/main.swift @@ -11,10 +11,9 @@ import NIO var timer: Timer? -let ADSBClient = NetADSBDecoder(host: "64.226.23.78", port: 30003) +let ADSBClient = NetADSBDecoder(host: "192.168.7.61", port: 12345) -print("Hello, World!") -print("Start listening client 2") +print("Net1090") //var timer:Timer? timer = Timer.scheduledTimer( @@ -22,12 +21,8 @@ timer = Timer.scheduledTimer( repeats: true ) { _ in print("Timer drain queue") - print("\(ADSBClient.msgarray.message_array.count)") - if ADSBClient.msgarray.message_array.count > 0 { - print(ADSBClient.msgarray.message_array.count) - for i in 0..