mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2026-01-20 15:40:24 +01:00
first idea for the router class
This commit is contained in:
parent
18d7a0db6f
commit
feb47c2f73
84
boswatch/router.py
Normal file
84
boswatch/router.py
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
class Module:
|
||||
def __init__(self, name):
|
||||
self.__name = name
|
||||
|
||||
def run(self, bwPacket):
|
||||
print("-- run module:", self.__name)
|
||||
return bwPacket
|
||||
|
||||
|
||||
class Plugin:
|
||||
def __init__(self, name):
|
||||
self.__name = name
|
||||
|
||||
def run(self, bwPacket):
|
||||
print("-- run plugin:", self.__name)
|
||||
|
||||
|
||||
class Router:
|
||||
def __init__(self, name):
|
||||
self.__name = name
|
||||
self.__modules = []
|
||||
self.__endpoints = []
|
||||
self.__bwPacket = None
|
||||
|
||||
def addModule(self, module):
|
||||
if type(module) is Module:
|
||||
self.__modules.append(module)
|
||||
else:
|
||||
print("not a instance of module class:", module)
|
||||
|
||||
def addEndpoint(self, endpoint):
|
||||
if (type(endpoint) is Plugin) or (type(endpoint) is Router):
|
||||
self.__endpoints.append(endpoint)
|
||||
else:
|
||||
print("not a instance of plugin class:", endpoint)
|
||||
|
||||
def call(self, bwPacket):
|
||||
# bwPacket has to be copied for each router
|
||||
# make it possible to run more routers parallel
|
||||
print("call router:", self.__name)
|
||||
for module in self.__modules:
|
||||
bwPacket = module.run(bwPacket)
|
||||
self.__callEndpoints(bwPacket)
|
||||
print("router finished:", self.__name)
|
||||
|
||||
def __callEndpoints(self, bwPacket):
|
||||
print("call endpoints:", self.__name)
|
||||
for endpoint in self.__endpoints:
|
||||
if type(endpoint) is not Router:
|
||||
endpoint.run(bwPacket)
|
||||
else:
|
||||
print("> endpoint is a new router")
|
||||
endpoint.call(bwPacket)
|
||||
|
||||
|
||||
# modules
|
||||
double = Module("double")
|
||||
descriptor = Module("descriptor")
|
||||
# boswatch plugins
|
||||
telegram = Plugin("telegram")
|
||||
mysql = Plugin("mysql")
|
||||
|
||||
Router1 = Router("R1")
|
||||
Router2 = Router("R2")
|
||||
|
||||
# Router 1 modules
|
||||
Router1.addModule(double)
|
||||
Router1.addModule(descriptor)
|
||||
Router1.addModule(double)
|
||||
Router1.addModule(double)
|
||||
Router1.addModule(descriptor)
|
||||
# Router 1 endpoints
|
||||
Router1.addEndpoint(telegram)
|
||||
Router1.addEndpoint(mysql)
|
||||
Router1.addEndpoint(Router2)
|
||||
|
||||
# Router 2 modules
|
||||
Router2.addModule(double)
|
||||
Router2.addModule(descriptor)
|
||||
# Router 2 endpoints
|
||||
Router2.addEndpoint(telegram)
|
||||
Router2.addEndpoint(mysql)
|
||||
|
||||
Router1.call("Test123")
|
||||
Loading…
Reference in a new issue