import logging setup_logging = __import__('logging_config').setup_logging setup_logging() logger = logging.getLogger('channels') class Event: def __init__(self): self.listeners = {} def on(self, event: str, listener: callable): if event not in self.listeners: self.listeners[event] = [] self.listeners[event].append(listener) logger.info(f"Registered listener for event: {event}") def off(self, event: str, listener: callable): if event in self.listeners: self.listeners[event] = [l for l in self.listeners[event] if l != listener] logger.info(f"Unregistered listener for event: {event}") def emit(self, event: str, *args, **kwargs): if event in self.listeners: for listener in self.listeners[event]: try: listener(*args, **kwargs) logger.info(f"Emitted event: {event}") except Exception as e: logger.error(f"Error emitting event {event}: {e}") class Channel: def __init__(self): self.event = Event() def on(self, event: str, listener: callable): self.event.on(event, listener) def off(self, event: str, listener: callable): self.event.off(event, listener) def emit(self, event: str, *args, **kwargs): self.event.emit(event, *args, **kwargs)