diff --git a/aman/AMAN.py b/aman/AMAN.py index 7a98345..20e88d5 100644 --- a/aman/AMAN.py +++ b/aman/AMAN.py @@ -4,6 +4,7 @@ import glob import os import random import sys +from threading import Lock import time from aman.com import AircraftReport_pb2 @@ -36,6 +37,7 @@ class AMAN: self.Weather = None self.WebUi = None self.Workers = [] + self.WorkersLock = Lock() # read all system relevant configuration files self.SystemConfig = System(os.path.join(configPath, 'System.ini')) @@ -53,6 +55,7 @@ class AMAN: self.Weather = Weather(self.SystemConfig.Weather) self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self) + self.acquireLock() # find the airport configurations and create the workers airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini') @@ -67,15 +70,41 @@ class AMAN: self.Workers.append(worker) print('Started worker for ' + icao) + self.releaseLock() + # initialize the random number generator + random.seed(time.time()) + def acquireLock(self): + if None != self.WorkersLock: + self.WorkersLock.acquire() + def releaseLock(self): + if None != self.WorkersLock: + self.WorkersLock.release() def updateAircraftReport(self, report : AircraftReport_pb2.AircraftReport): + self.acquireLock() + # 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 \ No newline at end of file + break + + self.releaseLock() + + def findAirport(self, icao : str): + self.acquireLock() + + airport = None + for worker in self.Workers: + if icao == worker.Icao: + airport = worker + break + + self.releaseLock() + + return airport