summaryrefslogtreecommitdiff
path: root/Net1090/NetADSBDecoder.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Net1090/NetADSBDecoder.swift')
-rw-r--r--Net1090/NetADSBDecoder.swift35
1 files changed, 29 insertions, 6 deletions
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<String> {get set}
+ //var message_array:Array<String> {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<String> = []
+final class ADSBQueue: ADSBQueueDelegate {
+ private var message_array:Array<String> = []
+ 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 {