mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2025-12-06 07:12:04 +01:00
85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
from boswatch.configYaml import ConfigYAML
|
|
from boswatch.packet.packet import Packet
|
|
|
|
import importlib
|
|
import copy
|
|
|
|
|
|
class Router:
|
|
def __init__(self, name):
|
|
self.__name = name
|
|
self.__route = []
|
|
logging.debug("add new router: %s", self.__name)
|
|
|
|
def addRoute(self, route):
|
|
logging.debug("[%s] add route: %s", self.__name, route)
|
|
self.__route.append(route)
|
|
|
|
def call(self, bwPacket):
|
|
for call in self.__route:
|
|
logging.debug("[%s] -> run route: %s", self.__name, call)
|
|
bwPacket_tmp = call(copy.deepcopy(bwPacket)) # todo is deepcopy here right?
|
|
|
|
if bwPacket_tmp is None: # returning None doesnt change the bwPacket
|
|
continue
|
|
|
|
if bwPacket is False: # returning False stops the router immediately
|
|
logging.debug("[%s] stopped", self.__name)
|
|
break
|
|
|
|
bwPacket = bwPacket_tmp
|
|
logging.debug("[%s] <- route returned: %s", self.__name, bwPacket)
|
|
logging.debug("[%s] ended", self.__name)
|
|
return bwPacket
|
|
|
|
def showRoute(self):
|
|
logging.debug("[%s] internal route", self.__name)
|
|
for call in self.__route:
|
|
logging.debug(" - %s", call)
|
|
|
|
|
|
config = ConfigYAML()
|
|
config.loadConfigFile("config/server.yaml")
|
|
|
|
routerList = {}
|
|
for router in config.get("router"):
|
|
routerList[router.get("name")] = Router(router.get("name"))
|
|
|
|
|
|
for router in config.get("router"):
|
|
for route in router.get("route"):
|
|
|
|
if route.get("type") == "plugin":
|
|
importedFile = importlib.import_module(route.get("type") + "." + route.get("name"))
|
|
loadedClass = importedFile.BoswatchPlugin(route.get("config"))
|
|
routerList[router.get("name")].addRoute(loadedClass._run)
|
|
|
|
elif route.get("type") == "module":
|
|
importedFile = importlib.import_module(route.get("type") + "." + route.get("name"))
|
|
loadedClass = importedFile.BoswatchModule(route.get("config"))
|
|
routerList[router.get("name")].addRoute(loadedClass._run)
|
|
|
|
elif route.get("type") == "router":
|
|
routerList[router.get("name")].addRoute(routerList[route.get("name")].call)
|
|
|
|
print()
|
|
print(routerList)
|
|
print()
|
|
|
|
for router in routerList:
|
|
routerList[router].showRoute()
|
|
|
|
print()
|
|
|
|
bwPack = Packet("{'timestamp': 1551421020.9004176, 'mode': 'zvei', 'zvei': '12345'}")
|
|
for alaRouter in config.get("alarmRouter"):
|
|
routerList[str(alaRouter)].call(bwPack)
|
|
|
|
|
|
exit(0)
|