mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2025-06-28 23:55:13 +00:00
Improve EventHandler response sending pattern
This commit is contained in:
@ -5,8 +5,6 @@ import logging
|
||||
from inspect import currentframe
|
||||
from typing import Iterable
|
||||
|
||||
from tfw.networking import Scope
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@ -17,7 +15,7 @@ class EventHandlerBase:
|
||||
|
||||
Derived classes must implement the handle_event() method
|
||||
"""
|
||||
def __init__(self, key, server_connector, scope=Scope.ZMQ):
|
||||
def __init__(self, key, server_connector, scope):
|
||||
self.server_connector = server_connector
|
||||
self.scope = scope
|
||||
self.keys = []
|
||||
@ -29,12 +27,18 @@ class EventHandlerBase:
|
||||
self.subscribe(*self.keys)
|
||||
self.server_connector.register_callback(self.event_handler_callback)
|
||||
|
||||
@property
|
||||
def key(self):
|
||||
def subscribe(self, *keys):
|
||||
"""
|
||||
Returns the oldest key this EventHandler was subscribed to.
|
||||
Subscribe this EventHandler to receive events for given keys.
|
||||
Note that you can subscribe to the same key several times in which
|
||||
case you will need to unsubscribe multiple times in order to stop
|
||||
receiving events.
|
||||
|
||||
:param keys: list of keys to subscribe to
|
||||
"""
|
||||
return self.keys[0]
|
||||
for key in keys:
|
||||
self.server_connector.subscribe(key)
|
||||
self.keys.append(key)
|
||||
|
||||
def event_handler_callback(self, message):
|
||||
"""
|
||||
@ -43,15 +47,8 @@ class EventHandlerBase:
|
||||
a response back in case the handler returned something.
|
||||
This is subscribed in __init__().
|
||||
"""
|
||||
if not self.check_key(message):
|
||||
return
|
||||
|
||||
response = self.dispatch_handling(message)
|
||||
if response:
|
||||
self.send_message(response)
|
||||
|
||||
def send_message(self, message):
|
||||
self.server_connector.send_message(message, self.scope)
|
||||
if self.check_key(message):
|
||||
self.dispatch_handling(message)
|
||||
|
||||
def check_key(self, message):
|
||||
"""
|
||||
@ -74,7 +71,7 @@ class EventHandlerBase:
|
||||
:param message: the message received
|
||||
:returns: the message to send back
|
||||
"""
|
||||
return self.handle_event(message)
|
||||
self.handle_event(message)
|
||||
|
||||
def handle_event(self, message):
|
||||
"""
|
||||
@ -85,18 +82,8 @@ class EventHandlerBase:
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def subscribe(self, *keys):
|
||||
"""
|
||||
Subscribe this EventHandler to receive events for given keys.
|
||||
Note that you can subscribe to the same key several times in which
|
||||
case you will need to unsubscribe multiple times in order to stop
|
||||
receiving events.
|
||||
|
||||
:param keys: list of keys to subscribe to
|
||||
"""
|
||||
for key in keys:
|
||||
self.server_connector.subscribe(key)
|
||||
self.keys.append(key)
|
||||
def send_message(self, message):
|
||||
self.server_connector.send_message(message, self.scope)
|
||||
|
||||
def unsubscribe(self, *keys):
|
||||
"""
|
||||
|
Reference in New Issue
Block a user