manager.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. from __future__ import annotations
  2. from typing import Protocol, runtime_checkable
  3. @runtime_checkable
  4. class ChannelRegistration(Protocol):
  5. """注册到 ``ChannelRegistry`` 的渠道配置需至少提供 ``enabled``。"""
  6. enabled: bool
  7. class ChannelRegistry:
  8. """渠道注册、启停、状态查询(与具体 IM 无关)。"""
  9. def __init__(self) -> None:
  10. self._registry: dict[str, ChannelRegistration] = {}
  11. self._running: dict[str, bool] = {}
  12. def register_channel(self, channel_id: str, cfg: ChannelRegistration) -> None:
  13. self._registry[channel_id] = cfg
  14. if channel_id not in self._running:
  15. self._running[channel_id] = cfg.enabled
  16. def start_channel(self, channel_id: str) -> None:
  17. self._running[channel_id] = True
  18. def stop_channel(self, channel_id: str) -> None:
  19. self._running[channel_id] = False
  20. def get_channel_status(self, channel_id: str) -> dict[str, str | bool]:
  21. cfg = self._registry.get(channel_id)
  22. return {
  23. "channel_id": channel_id,
  24. "registered": cfg is not None,
  25. "running": bool(self._running.get(channel_id)),
  26. "enabled": bool(cfg and cfg.enabled),
  27. }