diff --git a/hathor/cli/events_simulator/events_simulator.py b/hathor/cli/events_simulator/events_simulator.py index 207618de8..a265449a8 100644 --- a/hathor/cli/events_simulator/events_simulator.py +++ b/hathor/cli/events_simulator/events_simulator.py @@ -14,12 +14,11 @@ from argparse import ArgumentParser, Namespace -from hathor.cli.events_simulator.scenario import Scenario - DEFAULT_PORT = 8080 def create_parser() -> ArgumentParser: + from hathor.cli.events_simulator.scenario import Scenario from hathor.cli.util import create_parser parser = create_parser() diff --git a/hathor/event/event_manager.py b/hathor/event/event_manager.py index c29a76f9b..458d4878e 100644 --- a/hathor/event/event_manager.py +++ b/hathor/event/event_manager.py @@ -54,6 +54,7 @@ class EventManager: """ _peer_id: str + _is_running: bool = False _load_finished: bool = False @property @@ -83,11 +84,17 @@ def __init__( self._subscribe_events() def start(self, peer_id: str) -> None: + assert self._is_running is False, 'Cannot start, EventManager is already running' + self._peer_id = peer_id self._event_ws_factory.start() + self._is_running = True def stop(self): + assert self._is_running is True, 'Cannot stop, EventManager is not running' + self._event_ws_factory.stop() + self._is_running = False def _assert_closed_event_group(self): # XXX: we must check that the last event either does not belong to an event group or that it just closed an @@ -110,6 +117,8 @@ def _subscribe_events(self): self._pubsub.subscribe(event, self._handle_event) def _handle_event(self, event_type: HathorEvents, event_args: EventArguments) -> None: + assert self._is_running, 'Cannot handle event, EventManager is not started.' + event_type = _EVENT_CONVERTERS.get(event_type, event_type) event_specific_handlers = { HathorEvents.LOAD_FINISHED: self._handle_load_finished diff --git a/hathor/event/websocket/factory.py b/hathor/event/websocket/factory.py index ed5af01e7..41b19dd14 100644 --- a/hathor/event/websocket/factory.py +++ b/hathor/event/websocket/factory.py @@ -48,10 +48,14 @@ def __init__(self, reactor: Reactor, event_storage: EventStorage): def start(self): """Start the WebSocket server. Required to be able to send events.""" + assert self._is_running is False, 'Cannot start, EventWebsocketFactory is already running' + self._is_running = True def stop(self): """Stop the WebSocket server. No events can be sent.""" + assert self._is_running is True, 'Cannot stop, EventWebsocketFactory is not running' + self._is_running = False for connection in self._connections: diff --git a/hathor/manager.py b/hathor/manager.py index 89678dcd7..ef04a2a7e 100644 --- a/hathor/manager.py +++ b/hathor/manager.py @@ -269,6 +269,9 @@ def start(self) -> None: ) sys.exit(-1) + if self._event_manager: + self._event_manager.start(not_none(self.my_peer.id)) + self.state = self.NodeState.INITIALIZING self.pubsub.publish(HathorEvents.MANAGER_ON_START) self.connections.start() @@ -305,9 +308,6 @@ def start(self) -> None: if self.stratum_factory: self.stratum_factory.start() - if self._event_manager: - self._event_manager.start(not_none(self.my_peer.id)) - # Start running self.tx_storage.start_running_manager()