protect the AMAN itself by locks

This commit is contained in:
Sven Czarnian
2021-11-15 18:23:28 +01:00
parent 9028ef0442
commit 35d1012bf5

View File

@@ -4,6 +4,7 @@ import glob
import os import os
import random import random
import sys import sys
from threading import Lock
import time import time
from aman.com import AircraftReport_pb2 from aman.com import AircraftReport_pb2
@@ -36,6 +37,7 @@ class AMAN:
self.Weather = None self.Weather = None
self.WebUi = None self.WebUi = None
self.Workers = [] self.Workers = []
self.WorkersLock = Lock()
# read all system relevant configuration files # read all system relevant configuration files
self.SystemConfig = System(os.path.join(configPath, 'System.ini')) self.SystemConfig = System(os.path.join(configPath, 'System.ini'))
@@ -53,6 +55,7 @@ class AMAN:
self.Weather = Weather(self.SystemConfig.Weather) self.Weather = Weather(self.SystemConfig.Weather)
self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self) self.Receiver = Euroscope(configPath, self.SystemConfig.Server, self)
self.acquireLock()
# find the airport configurations and create the workers # find the airport configurations and create the workers
airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini') airportsPath = os.path.join(os.path.join(configPath, 'airports'), '*.ini')
@@ -67,11 +70,22 @@ class AMAN:
self.Workers.append(worker) self.Workers.append(worker)
print('Started worker for ' + icao) 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): def updateAircraftReport(self, report : AircraftReport_pb2.AircraftReport):
self.acquireLock()
# find the correct worker for the inbound # find the correct worker for the inbound
for worker in self.Workers: for worker in self.Workers:
if worker.Icao == report.destination: if worker.Icao == report.destination:
@@ -79,3 +93,18 @@ class AMAN:
worker.ReportQueue[report.aircraft.callsign] = report worker.ReportQueue[report.aircraft.callsign] = report
worker.releaseLock() 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