mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 13:40:45 +00:00
ykxmz 1.5.0:修复手表端 TLS 证书校验 + MTU 修复网络稳定性
被控端 - 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%) - 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败) - 每分钟回头找局域网,自动切回快 400 倍的路径 - 画面心跳帧:静止时省流量,客户端仍知道流是活的 - 锁屏时给出可操作的提示 手表端 - 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException - 连接错误翻译成人话(证书/时间/解析/超时分别提示) - 经中转连上后用服务器报的地址刷新已配对记录 - 新增局域网连接页面、服务器延迟检测 服务器端 - 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502) - 网络调优脚本 net-tune.sh(开机自动应用) - 管理页:批量删除、网络体检、下载区 - 隧道改 HTTP/2 + 双连接 文档 - 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""两件事(用户要求):
|
||||
|
||||
1. 跑全量时开的窗口,跑完要**自己关上**
|
||||
测试会弹真实的 Tk 窗口(首次设置窗口、投图窗口、屏幕共享提示等)。
|
||||
正常路径下测试自己会关,但一旦某个用例失败/超时,
|
||||
进程挂着,窗口就留在屏幕上不走了。
|
||||
做法:在 verify_all 结尾加一个收尾步骤,按进程把窗口关掉
|
||||
(先 CloseMainWindow 好声好气关,再强杀兜底)。
|
||||
|
||||
2. 把"锁屏检查"从全量里删掉
|
||||
之前我在 test_agent_protocol.py 里加了 desktop_locked(),
|
||||
锁屏时打印一大段提示。用户要求以后都别做这个检查。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import ast
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
|
||||
VERIFY = ROOT / "_tests" / "verify_all.ps1"
|
||||
PROTOCOL = ROOT / "_tests" / "test_agent_protocol.py"
|
||||
|
||||
# ===================== 1. 删掉锁屏检查 =====================
|
||||
|
||||
LOCK_BLOCK = '''def desktop_locked() -> bool:
|
||||
"""屏幕锁了没。锁屏时 Windows 不给抓屏,相关断言必然失败 ——
|
||||
那是环境,不是产品问题,要单独说清楚。"""
|
||||
try:
|
||||
from PIL import ImageGrab
|
||||
ImageGrab.grab()
|
||||
return False
|
||||
except Exception:
|
||||
return True
|
||||
|
||||
|
||||
def main() -> int:
|
||||
locked = desktop_locked()
|
||||
if locked:
|
||||
print()
|
||||
print(" !检测到桌面锁了(锁屏/无桌面会话)。")
|
||||
print(" 截屏和镜像相关的断言会失败,这是环境限制,不是产品问题。")
|
||||
print(" 解锁屏幕后重跑即可。")
|
||||
print()'''
|
||||
|
||||
NEW_MAIN = '''def main() -> int:'''
|
||||
|
||||
# ===================== 2. 收尾关窗口 =====================
|
||||
|
||||
CLEANUP_FUNC = '''function Close-TestWindows {
|
||||
# 测试会弹真实的 Tk 窗口(首次设置、投图、屏幕共享提示…)。
|
||||
# 正常路径下测试自己会关;但用例失败/超时时进程还挂着,
|
||||
# 窗口就留在屏幕上不走了。这里统一收尾。
|
||||
$closed = 0
|
||||
Get-Process python, pythonw -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.Id -ne $PID } |
|
||||
ForEach-Object {
|
||||
$line = (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine
|
||||
if ($line -and ($line -match '_tests' -or $line -match 'run_agent' `
|
||||
-or $line -match 'relay\\.py')) {
|
||||
# 先好好关主窗口
|
||||
try { $_.CloseMainWindow() | Out-Null } catch { }
|
||||
Start-Sleep -Milliseconds 250
|
||||
if (-not $_.HasExited) {
|
||||
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
$closed++
|
||||
}
|
||||
}
|
||||
|
||||
# 被控端自己(测试起过 ykxmz.exe)
|
||||
Get-Process ykxmz -ErrorAction SilentlyContinue | ForEach-Object {
|
||||
try { $_.CloseMainWindow() | Out-Null } catch { }
|
||||
Start-Sleep -Milliseconds 250
|
||||
if (-not $_.HasExited) {
|
||||
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
$closed++
|
||||
}
|
||||
|
||||
# Java 测试进程
|
||||
Get-Process java -ErrorAction SilentlyContinue | ForEach-Object {
|
||||
$line = (Get-CimInstance Win32_Process -Filter "ProcessId=$($_.Id)" -ErrorAction SilentlyContinue).CommandLine
|
||||
if ($line -and ($line -match 'JavaClientTest' -or $line -match 'JavaRelayTest')) {
|
||||
Stop-Process -Id $_.Id -Force -ErrorAction SilentlyContinue
|
||||
$closed++
|
||||
}
|
||||
}
|
||||
|
||||
if ($closed -gt 0) {
|
||||
Write-Host " 关了 $closed 个测试进程/窗口" -ForegroundColor DarkGray
|
||||
}
|
||||
Start-Sleep -Milliseconds 400
|
||||
}
|
||||
|
||||
'''
|
||||
|
||||
SUMMARY_ANCHOR = """Banner "验证汇总\""""
|
||||
|
||||
|
||||
def main() -> int:
|
||||
ok = True
|
||||
|
||||
# ---- 1. 删锁屏检查 ----
|
||||
text = PROTOCOL.read_text(encoding="utf-8")
|
||||
if "desktop_locked" in text:
|
||||
if LOCK_BLOCK in text:
|
||||
text = text.replace(LOCK_BLOCK, NEW_MAIN, 1)
|
||||
PROTOCOL.write_text(text, encoding="utf-8", newline="\n")
|
||||
print(" 已删掉 test_agent_protocol.py 里的锁屏检查")
|
||||
else:
|
||||
# 锚点不完全一致时,用正则兜底
|
||||
text = re.sub(
|
||||
r"def desktop_locked\(\).*?\n\n\n(?=def main)", "", text,
|
||||
count=1, flags=re.S)
|
||||
text = re.sub(
|
||||
r"def main\(\) -> int:\n locked = desktop_locked\(\)"
|
||||
r".*?\n\n", "def main() -> int:\n", text, count=1, flags=re.S)
|
||||
if "desktop_locked" in text:
|
||||
print(" [警告] 锁屏检查没删干净,还有残留")
|
||||
ok = False
|
||||
else:
|
||||
PROTOCOL.write_text(text, encoding="utf-8", newline="\n")
|
||||
print(" 已删掉锁屏检查(正则兜底)")
|
||||
else:
|
||||
print(" 锁屏检查已经没有了")
|
||||
|
||||
# ---- 2. verify_all 加收尾 ----
|
||||
raw = VERIFY.read_bytes()
|
||||
had_bom = raw.startswith(b"\xef\xbb\xbf")
|
||||
vtext = raw.decode("utf-8-sig")
|
||||
|
||||
if "Close-TestWindows" in vtext:
|
||||
print(" verify_all 已经有 Close-TestWindows")
|
||||
else:
|
||||
# 函数插在 Stop-Strays 前面
|
||||
anchor = "function Stop-Strays {"
|
||||
if anchor in vtext:
|
||||
vtext = vtext.replace(anchor, CLEANUP_FUNC + anchor, 1)
|
||||
print(" 加了 Close-TestWindows 函数")
|
||||
else:
|
||||
print(" [失败] 找不到插入位置")
|
||||
ok = False
|
||||
|
||||
# 在汇总之前调用
|
||||
if SUMMARY_ANCHOR in vtext:
|
||||
vtext = vtext.replace(
|
||||
SUMMARY_ANCHOR,
|
||||
'# 收尾:把测试过程中弹出来的窗口关掉(用户要求)\n'
|
||||
'Close-TestWindows\n\n' + SUMMARY_ANCHOR, 1)
|
||||
print(" 在汇总前调用了 Close-TestWindows")
|
||||
else:
|
||||
print(" [失败] 找不到汇总锚点")
|
||||
ok = False
|
||||
|
||||
VERIFY.write_bytes((b"\xef\xbb\xbf" if had_bom else b"")
|
||||
+ vtext.replace("\r\n", "\n").encode("utf-8"))
|
||||
|
||||
ast.parse(PROTOCOL.read_text(encoding="utf-8"))
|
||||
print(" test_agent_protocol.py 语法 OK")
|
||||
return 0 if ok else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user