protect the AMAN itself by locks
This commit is contained in:
31
aman/AMAN.py
31
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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user