Initial project structure: reusable isometric bot engine with D2R implementation
This commit is contained in:
commit
e0282a7111
44 changed files with 3433 additions and 0 deletions
34
engine/state/events.py
Normal file
34
engine/state/events.py
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
"""Event system for inter-component communication."""
|
||||
|
||||
from typing import Callable, Any, Dict, List
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class EventBus:
|
||||
"""Simple publish/subscribe event system."""
|
||||
|
||||
def __init__(self):
|
||||
self._listeners: Dict[str, List[Callable]] = {}
|
||||
|
||||
def on(self, event: str, callback: Callable) -> None:
|
||||
"""Subscribe to an event."""
|
||||
self._listeners.setdefault(event, []).append(callback)
|
||||
|
||||
def off(self, event: str, callback: Callable) -> None:
|
||||
"""Unsubscribe from an event."""
|
||||
if event in self._listeners:
|
||||
self._listeners[event] = [cb for cb in self._listeners[event] if cb != callback]
|
||||
|
||||
def emit(self, event: str, **data: Any) -> None:
|
||||
"""Emit an event to all subscribers."""
|
||||
for cb in self._listeners.get(event, []):
|
||||
try:
|
||||
cb(**data)
|
||||
except Exception as e:
|
||||
logger.error(f"Event handler error for '{event}': {e}")
|
||||
|
||||
def clear(self) -> None:
|
||||
"""Remove all listeners."""
|
||||
self._listeners.clear()
|
||||
Loading…
Add table
Add a link
Reference in a new issue