fix(lite): bundle tun runtime and quiet connection logs

This commit is contained in:
RoyirinRosmontis
2026-09-19 04:27:20 +08:00
parent 9d5bc527d3
commit 357fd26a49
3 changed files with 35 additions and 19 deletions
+18 -5
View File
@@ -46,9 +46,11 @@ def _receive(reader) -> dict[str, Any]:
class TunModeController:
"""普通权限 GUI 仅在首次开启 TUN 时启动管理员工作进程。"""
def __init__(self, command: list[str], log: Callable[[str], None]):
def __init__(self, command: list[str], log: Callable[[str], None],
detail_log: Callable[[str], None] | None = None):
self.command = command
self.log = log
self.detail_log = detail_log or log
self._lock = threading.RLock()
self._socket: socket.socket | None = None
self._reader = None
@@ -129,7 +131,8 @@ class TunModeController:
while True:
message = _receive(self._reader)
if message.get("type") == "log":
self.log(str(message.get("message") or ""))
callback = self.detail_log if message.get("detail") else self.log
callback(str(message.get("message") or ""))
continue
if message.get("type") != "result":
raise TunModeError("TUN 工作进程响应无效")
@@ -192,12 +195,22 @@ def run_tun_worker(port: int, token: str, backend_factory,
send_lock = threading.Lock()
_send(connection, {"type": "hello", "token": token}, send_lock)
def emit(message: str) -> None:
def emit(message: str, detail: bool = False) -> None:
try:
_send(connection, {"type": "log", "message": str(message)}, send_lock)
_send(connection, {"type": "log", "message": str(message),
"detail": bool(detail)}, send_lock)
except OSError:
pass
class _WorkerLogger:
def __call__(self, message: str) -> None:
emit(message)
def detail(self, message: str) -> None:
emit(message, detail=True)
logger = _WorkerLogger()
backend = None
try:
while True:
@@ -213,7 +226,7 @@ def run_tun_worker(port: int, token: str, backend_factory,
# 延迟创建后端,使初始化失败也能通过控制协议返回具体原因,
# 避免 GUI 只看到 Windows 的 10053 连接中止错误。
if backend is None:
backend = backend_factory(emit)
backend = backend_factory(logger)
start_backend(backend, request["payload"])
value = None
elif command == "stop":