// // ADSBRunner.swift // LearnMapKit // // Created by Jacky Jack on 28/06/2024. // import Foundation struct ADSBLocation { let address: Int let lat: Double let long: Double //let alt: Int } struct ADSBAltitude { let address: Int let altitude: Int } struct ADSBICAOname { let address: Int let ICAOname: String } class ADSBFileRunner { var filename: URL //track all airplanes var tracker = AirPlaneTracker() var adsb_source: String = "" init(filename:String) { self.filename = URL(fileURLWithPath:filename) } func openFile() { print("File location [\(filename.absoluteString)]") //check if file excists if (checkIfFileExists(filename.path) == false) { print("Supplied path \(filename.path) doesnt exists") exit(1) } } func readFile() { //load the file with adsb data do { adsb_source = try String(contentsOfFile: filename.path) print("Loaded \(adsb_source.count) bytes") } catch { print("Couldn't load text from a file \(filename.path)") exit(1) } print("If there anything new in file") } func decode() { for line in self.adsb_source.components(separatedBy: .newlines) { var found=false do { if let tokenMatch = try matchADSBLong.prefixMatch(in: line) { //print("\(String(tokenMatch.output))") found = true let str = String(tokenMatch.output) let startIndex = str.index(str.startIndex, offsetBy: 1) let endIndex = str.index(str.endIndex, offsetBy: -2) let decoder = Decoder(String(str[startIndex...endIndex])) if decoder.DataFormat == 17 { if let d17 = decoder.getDataFormat17() { if (d17.TypeCode == 4) { if let indentification = d17.messageIdentification { tracker.addDF17Indentification(d17.AddressAnnounced, indentification.ICAOName) } } else if (d17.TypeCode >= 9 && d17.TypeCode <= 18) { if let airbornposition = d17.messageAirbornPositon { tracker.addDF17AirBornPosition( d17.AddressAnnounced, airbornposition.Latitude, airbornposition.Longitude, airbornposition.Altitude, airbornposition.CPRFormat == 0 ) if let position = tracker.getPosition(d17.AddressAnnounced) { print("position: \(position)") } } } } } }; } catch { print("Error") } if (found == false) { print("Unknown adsb data line \(line)") } } //try to free the string after decoded //adsb_source = "" } }