feat: 把 A 端的 Session/KCP/视频/控制 都收口到一个本地 daemon 进程里,Django 和输入发送端都改成通过本机 UDS HTTP 去访问它,同时补齐了观测、性能和可用性上的几个关键问题。
This commit is contained in:
51
backend/control/services.py
Normal file
51
backend/control/services.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
||||
WORKSPACE_ROOT = PROJECT_ROOT.parent
|
||||
|
||||
|
||||
def _load_client_api():
|
||||
try:
|
||||
from omnisocket_a_side.client import OmniDaemonClient, OmniDaemonError
|
||||
except ImportError:
|
||||
python_dir = WORKSPACE_ROOT / "OmniSocketGo" / "python"
|
||||
if python_dir.exists():
|
||||
sys.path.insert(0, str(python_dir))
|
||||
from omnisocket_a_side.client import OmniDaemonClient, OmniDaemonError
|
||||
return OmniDaemonClient, OmniDaemonError
|
||||
|
||||
|
||||
_OmniDaemonClient, OmniDaemonError = _load_client_api()
|
||||
_daemon_client = _OmniDaemonClient()
|
||||
|
||||
|
||||
def get_daemon_client():
|
||||
return _daemon_client
|
||||
|
||||
|
||||
class ControlProxyService:
|
||||
def get_status(self) -> dict[str, Any]:
|
||||
return get_daemon_client().get_control_status()
|
||||
|
||||
def send_event(
|
||||
self,
|
||||
*,
|
||||
event_code: str,
|
||||
drive_value: float = 1.0,
|
||||
source: str = "django-api",
|
||||
client_time_ms: int | None = None,
|
||||
) -> dict[str, Any]:
|
||||
return get_daemon_client().send_control_event(
|
||||
source=source,
|
||||
event_code=event_code,
|
||||
drive_value=drive_value,
|
||||
client_time_ms=client_time_ms,
|
||||
)
|
||||
|
||||
|
||||
control_service = ControlProxyService()
|
||||
Reference in New Issue
Block a user