refactor: migrate workflow to v2 core and archive legacy modules
This commit is contained in:
36
core/events/event_bus.py
Normal file
36
core/events/event_bus.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import asyncio
|
||||
import logging
|
||||
from typing import Callable, Dict, List, Any, Awaitable
|
||||
|
||||
logger = logging.getLogger("cs_agent")
|
||||
|
||||
class AsyncEventBus:
|
||||
"""
|
||||
异步事件总线:解耦业务触发与平台发送。
|
||||
支持一个事件被多个订阅者监听。
|
||||
"""
|
||||
def __init__(self):
|
||||
self._listeners: Dict[str, List[Callable[..., Awaitable[None]]]] = {}
|
||||
|
||||
def subscribe(self, event_type: str, callback: Callable[..., Awaitable[None]]):
|
||||
"""订阅事件"""
|
||||
if event_type not in self._listeners:
|
||||
self._listeners[event_type] = []
|
||||
self._listeners[event_type].append(callback)
|
||||
logger.info(f"[EventBus] 新订阅者已注册到事件: {event_type}")
|
||||
|
||||
async def emit(self, event_type: str, **kwargs):
|
||||
"""发布事件:异步广播给所有订阅者"""
|
||||
if event_type not in self._listeners:
|
||||
return
|
||||
|
||||
tasks = []
|
||||
for callback in self._listeners[event_type]:
|
||||
tasks.append(asyncio.create_task(callback(**kwargs)))
|
||||
|
||||
if tasks:
|
||||
await asyncio.gather(*tasks, return_exceptions=True)
|
||||
logger.info(f"[EventBus] 事件 {event_type} 已成功广播给 {len(tasks)} 个订阅者")
|
||||
|
||||
# 全局单例,所有模块共用这一个广播台
|
||||
bus = AsyncEventBus()
|
||||
Reference in New Issue
Block a user