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