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 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'Net1090/NetADSBDecoder.swift') 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 { -- cgit v1.2.3