summaryrefslogtreecommitdiff
path: root/LearnMapKit/ADSBRunner.swift
diff options
context:
space:
mode:
Diffstat (limited to 'LearnMapKit/ADSBRunner.swift')
-rw-r--r--LearnMapKit/ADSBRunner.swift110
1 files changed, 87 insertions, 23 deletions
diff --git a/LearnMapKit/ADSBRunner.swift b/LearnMapKit/ADSBRunner.swift
index 6d2bbc5..e05978c 100644
--- a/LearnMapKit/ADSBRunner.swift
+++ b/LearnMapKit/ADSBRunner.swift
@@ -34,81 +34,91 @@ enum DataStreamType {
//get stream of decoded data, to tagged stream so all can be processed in sequence
class ADSBDataQueue {
- var icaoQueue: Deque<ADSBICAOname> = []
+ //var icaoQueue: Deque<ADSBICAOname> = []
+ var icaoArray: Array<ADSBICAOname> = []
var altQueue: Deque<ADSBAltitude> = []
var locQueue: Deque<ADSBLocation> = []
- var tagQueue: Deque<DataStreamType> = []
+ //var tagQueue: Deque<> = []
+ var tagArray: Array<DataStreamType> = []
func getNextTag() -> DataStreamType {
- if tagQueue.count < 0 {
+ if tagArray.count < 0 {
return DataStreamType.EMPTY
}
- return tagQueue[tagQueue.count-1]
+ return tagArray[tagArray.count-1]
}
func addIcaoName(_ address: Int, _ icaoname: String) {
- tagQueue.append(DataStreamType.ADSB_ICAO)
- icaoQueue.append(ADSBICAOname(address: address, ICAOname: icaoname))
+ tagArray.append(DataStreamType.ADSB_ICAO)
+ icaoArray.append(ADSBICAOname(address: address, ICAOname: icaoname))
}
func addAltitude(_ address: Int, _ altitude: Int) {
- tagQueue.append(DataStreamType.ADSB_ALTITUDE)
+ tagArray.append(DataStreamType.ADSB_ALTITUDE)
altQueue.append(ADSBAltitude(address: address, altitude: altitude))
}
func addLocation(_ address: Int, _ lat: Double, _ long: Double) {
- tagQueue.append(DataStreamType.ADSB_LOCATION)
+ tagArray.append(DataStreamType.ADSB_LOCATION)
locQueue.append(ADSBLocation(address: address, lat: lat, long: long))
}
func getIcaoName() -> ADSBICAOname {
- if tagQueue.count < 1 {
- print("ADSB tag Queue is empry")
- return ADSBICAOname(address:0,ICAOname: "")
+ if tagArray.count < 1 {
+ print("ADSB tag Queue is empty")
+ return ADSBICAOname(address:0,ICAOname: "TEmpty")
}
- let tag = tagQueue[tagQueue.count-1]
+ let tag = tagArray[tagArray.count-1]
if tag != DataStreamType.ADSB_ICAO {
print("ADSB Queue empty")
- return ADSBICAOname(address:0,ICAOname: "")
+ return ADSBICAOname(address:0,ICAOname: "QEmpty")
+ }
+ tagArray.removeLast()
+ var ret_icao_name = ADSBICAOname(address:0, ICAOname: "Default")
+ if let last_icao_name = icaoArray.popLast() {
+ ret_icao_name = last_icao_name
}
- tagQueue.removeLast()
- return icaoQueue.popLast()!
+ return ret_icao_name
}
func getAltitude() -> ADSBAltitude {
- if tagQueue.count < 1 {
+ if tagArray.count < 1 {
print("ADSB tag Queue is empry")
return ADSBAltitude(address:0,altitude:0)
}
- let tag = tagQueue[tagQueue.count-1]
+ let tag = tagArray[tagArray.count-1]
if tag != DataStreamType.ADSB_ALTITUDE {
print("ADSB Queue empty")
return ADSBAltitude(address:0,altitude:0)
}
- tagQueue.removeLast()
+ tagArray.removeLast()
return altQueue.popLast()!
}
func getLocation() -> ADSBLocation {
- if tagQueue.count < 1 {
+ if tagArray.count < 1 {
print("ADSB tag Queue is empry")
return ADSBLocation(address:0,lat:0.0,long:0.0)
}
- let tag = tagQueue[tagQueue.count-1]
+ let tag = tagArray[tagArray.count-1]
if tag != DataStreamType.ADSB_LOCATION {
print("ADSB Queue empty")
return ADSBLocation(address:0,lat:0.0,long:0.0)
}
- tagQueue.removeLast()
+ tagArray.removeLast()
return locQueue.popLast()!
}
func haveNum(_ num: Int) -> Bool {
- if (tagQueue.count > num) {
+ if (tagArray.count > num) {
return true
}
return false
}
+
+ func getCount() -> Int {
+ return tagArray.count
+ }
}
class ADSBFileRunner {
@@ -117,13 +127,27 @@ class ADSBFileRunner {
//track all airplanes
var tracker = AirPlaneTracker()
var adsb_source: String = ""
+ //should make it outside and use here?
var adsb_tag_stream = ADSBDataQueue()
+ private var decoded_status: Bool = false
init(filename:String) {
self.filename = URL(fileURLWithPath:filename)
}
+ init() {
+ self.filename = URL(fileURLWithPath:"")
+ }
+
+ func setFileName(_ filename:String) {
+ self.filename = URL(fileURLWithPath: filename)
+ }
+
func openFile() {
+ if self.filename == URL(fileURLWithPath:"") {
+ print("File name for ADSBRunner not specified")
+ return
+ }
print("File location [\(filename.absoluteString)]")
//check if file excists
@@ -139,7 +163,7 @@ class ADSBFileRunner {
adsb_source = try String(contentsOfFile: filename.path)
print("Loaded \(adsb_source.count) bytes")
} catch {
- print("Couldn't load text from a file \(filename.path)")
+ print("Couldn't load text from a file \(filename.path) \(error)")
exit(1)
}
print("If there anything new in file")
@@ -192,7 +216,47 @@ class ADSBFileRunner {
print("Unknown adsb data line \(line)")
}
}
+ self.decoded_status = true
//try to free the string after decoded
//adsb_source = ""
+ for i in 0..<adsb_tag_stream.icaoArray.count {
+ print(adsb_tag_stream.icaoArray[i])
+ }
+ print("Queue done")
+ }
+
+ func jobDone() -> Bool {
+ return self.decoded_status
+ }
+
+ func getPlainData(_ num_queries: Int) -> ADSBDataQueue {
+ var ret = ADSBDataQueue()
+ if adsb_tag_stream.haveNum(num_queries) {
+
+ for _ in 0..<num_queries {
+ let nextTag = adsb_tag_stream.getNextTag()
+ if nextTag == DataStreamType.EMPTY {
+ return ret
+ }
+ if (nextTag == DataStreamType.ADSB_ALTITUDE) {
+ let alt = adsb_tag_stream.getAltitude()
+ ret.addAltitude(alt.address, alt.altitude)
+ } else if (nextTag == DataStreamType.ADSB_ICAO) {
+ let icao = adsb_tag_stream.getIcaoName()
+ ret.addIcaoName(icao.address, icao.ICAOname)
+ } else if (nextTag == DataStreamType.ADSB_LOCATION) {
+ let loc = adsb_tag_stream.getLocation()
+ ret.addLocation(loc.address, loc.lat, loc.long)
+ }
+ }
+ return ret
+ } else {
+ print("Plain data query is empty")
+ }
+ return ret
+ }
+
+ func getCount() -> Int {
+ return self.adsb_tag_stream.getCount()
}
}