# -*- coding: utf-8 -*- """把手表的中转地址真正接进连接流程。 逻辑: 配了中转地址 -> connectViaRelay(跨网络) 没配 -> connect(host, port)(局域网,原来那套) 中转要走公网 + 好几次 HTTP 往返,超时给到 40 秒;局域网仍然 9 秒。 """ from __future__ import annotations import sys from pathlib import Path MAIN = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote\android\src" r"\com\lanremote\watch\MainActivity.java") OLD = ''' try { Map reply = client.connect(host, port, code, token, MainActivity.this, 9000); ok = Json.bool(reply, "ok", false); if (ok) { newToken = Json.str(reply, "token", token == null ? "" : token); serverName = Json.str(reply, "serverName", host); } else { error = Json.str(reply, "error", "连接被拒绝"); } } catch (final IOException e) { error = describeNetworkError(e, host); }''' NEW = ''' try { final String relay = relayUrl(); Map reply; if (!relay.isEmpty()) { // 跨网络:电脑和手表都在 NAT 后面,直连不可能, // 两边各自连出去、由中转按配对码对接。 // 走公网要几个 HTTP 往返,超时给宽一点。 appendLog("经中转连接:" + relay); reply = client.connectViaRelay(relay, code, token, MainActivity.this, 40000); } else { reply = client.connect(host, port, code, token, MainActivity.this, 9000); } ok = Json.bool(reply, "ok", false); if (ok) { newToken = Json.str(reply, "token", token == null ? "" : token); serverName = Json.str(reply, "serverName", host); } else { error = Json.str(reply, "error", "连接被拒绝"); } } catch (final IOException e) { error = describeNetworkError(e, host); }''' def main() -> int: text = MAIN.read_text(encoding="utf-8") if "connectViaRelay(relay" in text: print(" 已经接过") return 0 if OLD not in text: print(" [失败] 锚点没找到") return 1 MAIN.write_text(text.replace(OLD, NEW, 1), encoding="utf-8") print(" 中转地址已接进连接流程(配了走中转,没配走局域网)") return 0 if __name__ == "__main__": sys.exit(main())