12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #!/usr/bin/env python
- import glob
- import os
- import sys
- from aman.com import AircraftReport_pb2
- from aman.com.Euroscope import Euroscope
- from aman.com.Weather import Weather
- from aman.config.AircraftPerformance import AircraftPerformance
- from aman.config.Airport import Airport
- from aman.config.System import System
- from aman.sys.Worker import Worker
- class AMAN:
- def findConfigPath():
- envvar = os.environ.get('AMAN_CONFIG_PATH')
- if None == envvar:
- print('No AMAN_CONFIG_PATH in environment variables found. Using execution directory.')
- path = os.getcwd()
- else:
- print('AMAN_CONFIG_PATH found.')
- path = envvar
- print('Config-path: ' + path)
- return path
- def __init__(self):
- # default initialization of members
- self.systemConfig = None
- self.aircraftPerformance = None
- self.receiver = None
- self.weather = None
- self.workers = []
- self.inbounds = {}
- def __del__(self):
- self.release()
- def aquire(self):
- configPath = AMAN.findConfigPath()
- # read all system relevant configuration files
- self.systemConfig = System(os.path.join(configPath, 'System.ini'))
- print('Parsed System.ini')
- # read the aircraft performance data
- self.aircraftPerformance = AircraftPerformance(os.path.join(configPath, 'PerformanceData.ini'))
- if None == self.aircraftPerformance:
- sys.stderr.write('No aircraft performance data found!')
- sys.exit(-1)
- else:
- print('Parsed PerformanceData.ini. Extracted ' + str(len(self.aircraftPerformance.aircrafts)) + ' aircrafts')
- self.weather = Weather()
- self.weather.acquire(self.systemConfig.Weather)
- # find the airport configurations and create the workers
- airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini')
- for file in glob.glob(airportsPath):
- icao = os.path.splitext(os.path.basename(file))[0]
- print('Parsing planner configuration for ' + icao)
- airportConfig = Airport(file, icao)
- # initialize the worker thread
- worker = Worker()
- worker.acquire(icao, airportConfig)
- self.workers.append(worker)
- print('Started worker for ' + icao)
- # create the EuroScope receiver
- self.receiver = Euroscope()
- self.receiver.acquire(configPath, self.systemConfig.Server, self)
- def release(self):
- if None != self.receiver:
- self.receiver.release()
- self.receiver = None
- if None != self.weather:
- self.weather.release()
- self.weather = None
- if None != self.workers:
- for worker in self.workers:
- worker.release()
- self.workers = None
- def updateAircraftReport(self, report : AircraftReport_pb2.AircraftReport):
- # find the correct worker for the inbound
- for worker in self.workers:
- if worker.icao == report.destination:
- worker.acquireLock()
- worker.reportQueue[report.aircraft.callsign] = report
- worker.releaseLock()
- break
|