84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import json
|
|
import logging
|
|
import pathlib
|
|
import queue
|
|
import threading
|
|
|
|
from . import config
|
|
from . import controller
|
|
from . import dect
|
|
from . import routing
|
|
from . import ywsd
|
|
|
|
logger = logging.getLogger("fieldpoc.fieldpoc")
|
|
|
|
class FieldPOC:
|
|
config = None
|
|
extensions = None
|
|
temp_extensions = {}
|
|
|
|
def __init__(self, config_file_path, extensions_file_path):
|
|
logger.info("loading configuration")
|
|
self.config_file_path = pathlib.Path(config_file_path)
|
|
self._load_config()
|
|
self.extensions_file_path = pathlib.Path(extensions_file_path)
|
|
self._load_extensions()
|
|
|
|
logger.info("initialising queues")
|
|
self.queues = {
|
|
"controller": queue.Queue(),
|
|
"dect": queue.Queue(),
|
|
"routing": queue.Queue(),
|
|
}
|
|
|
|
logger.info("initialising components")
|
|
self._controller = controller.Controller(self)
|
|
self._dect = dect.Dect(self)
|
|
self._routing = routing.Routing(self)
|
|
self._ywsd = ywsd.Ywsd(self)
|
|
|
|
def queue_all(self, msg):
|
|
"""
|
|
Send message to every queue
|
|
"""
|
|
|
|
for queue in self.queues.values():
|
|
queue.put(msg)
|
|
|
|
def init(self):
|
|
"""
|
|
Prepare some data structures.
|
|
Run this once before using FieldPOC.
|
|
"""
|
|
|
|
logger.info("initialize datastructures")
|
|
|
|
self._ywsd.init()
|
|
|
|
logger.info("initialization complete")
|
|
|
|
def run(self):
|
|
logger.info("starting components")
|
|
|
|
self._controller_thread = threading.Thread(target=self._controller.run)
|
|
self._controller_thread.start()
|
|
|
|
self._dect_thread = threading.Thread(target=self._dect.run)
|
|
self._dect_thread.start()
|
|
|
|
self._routing_thread = threading.Thread(target=self._routing.run)
|
|
self._routing_thread.start()
|
|
|
|
self._ywsd_thread = threading.Thread(target=self._ywsd.run, daemon=True)
|
|
self._ywsd_thread.start()
|
|
|
|
logger.info("started components")
|
|
|
|
def _load_config(self):
|
|
self.config = config.Config(json.loads(self.config_file_path.read_text()))
|
|
|
|
def _load_extensions(self):
|
|
self.extensions = config.Extensions(json.loads(self.extensions_file_path.read_text()))
|