|
@@ -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
|
|
|
+ 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
|