|
|
资讯缩略图:
资讯发布日期:2026-08-19
资讯发布简介:本地调试版原生websocket版
资讯关键词:本地调试版原生websocket版
资讯所属分类:IT资讯
联系:
① 本信息收集于网络,如有不对的地方欢迎联系我纠正! ② 本信息免费收录,不存在价格的问题! ③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!
④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/
资讯详细描述
 | |  |  | 本地调试版原生websocket版
- /**
- * WebSocket 屏幕截图传输 - 本地调试版(AIWROK 原生 websocket 版)
- *
- * 👉 参考 AIWROK IDE 文档,5 个原生 API 正确签名:
- * void setSocketID(String arg0)
- * void event(Function arg0=连接成功, Function arg1=接收消息,
- * Function arg2=连接失败, Function arg3=断开连接)
- * void connet(String wsUrl) ← 注意拼写:connet(双n少c,不是 connect)
- * void send(Object msg)
- * void close()
- *
- * 配合 WebSocket测试服务器 使用
- */
- print.log("===== WebSocket 屏幕截图传输(AIWROK 原生版)开始 =====");
- // ========== 配置 ==========
- var config = {
- serverUrl: "192.168.10.103:8886", // ← 改成 PC 的局域网 IP:端口
- screenshotInterval: 5000, // 截图间隔(毫秒)
- reconnectInterval: 2500, // 重连间隔(毫秒)
- maxReconnectAttempts: 10, // 最大重连次数
- connectWaitSec: 15, // 单次连接等待秒数
- runDuration: 30000 // 总运行时长(毫秒)
- };
- // ========== 连接状态 ==========
- var ws = null; // websocket 实例
- var state = {
- connected: false,
- err: null,
- closed: false,
- saveDir: "",
- saveUrlPrefix: "",
- imgCount: 0,
- reconnectAttempts: 0,
- totalSent: 0
- };
- var screenshotTimer = null;
- // ========== 服务器消息解析 ==========
- function parseServerMessage(raw) {
- if (typeof raw !== "string") {
- try { raw = String(raw); } catch (e) { raw = "" + raw; }
- }
- var out = { type: "UNKNOWN", raw: raw };
- if (raw.indexOf("WELCOME|") === 0) {
- out.type = "WELCOME";
- var parts = raw.split("|");
- out.id = parts[1] || "";
- for (var i = 2; i < parts.length; i++) {
- var eqIdx = parts[i].indexOf("=");
- if (eqIdx > 0) out[parts[i].substring(0, eqIdx)] = parts[i].substring(eqIdx + 1);
- }
- } else if (raw.indexOf("IMG_SAVED|") === 0) {
- out.type = "IMG_SAVED";
- var p = raw.split("|");
- out.seq = p[1] || "";
- out.sizeTxt = p[2] || "";
- out.absPath = p[3] || "";
- out.fileUrl = p[4] || "";
- } else if (raw.indexOf("IMG_FAIL|") === 0) {
- out.type = "IMG_FAIL";
- } else if (raw.indexOf("ECHO|") === 0) {
- out.type = "ECHO";
- out.text = raw.substring("ECHO|".length);
- }
- return out;
- }
- // ========== 核心:用 AIWROK 原生 5 API 建立连接 ==========
- function initWebSocket() {
- // 重置状态
- state.connected = false;
- state.err = null;
- state.closed = false;
- // ① 创建
- ws = new websocket();
- // ② setSocketID
- try { ws.setSocketID("screen_" + (new Date().getTime())); }
- catch (e) { printl(" ⚠️ setSocketID 忽略异常: " + e.message); }
- // ③ event(4 个位置回调,顺序不能错!)
- // arg0 = 连接成功 arg1 = 接收消息 arg2 = 连接失败 arg3 = 断开
- try {
- ws.event(
- function () { // arg0 连接成功
- state.connected = true;
- state.err = null;
- state.reconnectAttempts = 0;
- print.log("WS: onopen");
- printl("✅ 连接成功(onopen)");
- startScreenshotTimer();
- },
- function (msg) { // arg1 接收消息
- var raw;
- try { raw = String(msg); } catch (e) { raw = ""; }
- print.log("WS: onmessage len=" + raw.length);
- var parsed = parseServerMessage(raw);
- if (parsed.type === "WELCOME") {
- state.saveDir = parsed.save_dir || "";
- state.saveUrlPrefix = parsed.save_file_url || "";
- printl("📩 WELCOME " + parsed.id);
- if (state.saveDir) {
- printl("📁 保存目录: " + state.saveDir);
- printl("🔗 目录URL: " + state.saveUrlPrefix);
- }
- } else if (parsed.type === "IMG_SAVED") {
- printl("💾 PC 已保存图片 " + parsed.seq);
- printl(" 大小: " + parsed.sizeTxt);
- printl(" 路径: " + parsed.absPath);
- printl(" � " + parsed.fileUrl);
- } else if (parsed.type === "IMG_FAIL") {
- printl("🔴 服务器保存失败: " + raw);
- } else if (parsed.type === "ECHO") {
- printl("📩 回显: " + parsed.text.substring(0, 150));
- } else {
- printl("📩 收到: " + raw.substring(0, 200) + (raw.length > 200 ? "..." : ""));
- }
- },
- function (err) { // arg2 连接失败
- var msg = "";
- try { msg = String(err); } catch (e) {}
- state.err = msg || "连接失败";
- state.connected = false;
- print.log("WS: onerror " + msg);
- printl("❌ 连接失败(onerror): " + msg);
- stopScreenshotTimer();
- reconnectWebSocket();
- },
- function () { // arg3 断开
- state.closed = true;
- state.connected = false;
- print.log("WS: onclose");
- printl("⚪ 连接断开(onclose)");
- stopScreenshotTimer();
- reconnectWebSocket();
- }
- );
- } catch (e) {
- printl("❌ event(4回调) 注册失败: " + e.message);
- reconnectWebSocket();
- return;
- }
- // ④ connet(双 n 少 c,千万别写成 connect)
- try {
- var url = "ws://" + config.serverUrl;
- printl("正在连接: " + url + "(" + config.connectWaitSec + " 秒超时)");
- print.log("调用 connet(" + url + ")");
- ws.connet(url);
- } catch (e) {
- printl("❌ connet 抛异常: " + e.message);
- state.err = e.message;
- reconnectWebSocket();
- return;
- }
- // 同步等待:如果在 connectWaitSec 秒内既没触发 onopen 也没 onerror,就当作失败
- var waited = 0;
- while (!state.connected && !state.err && waited < config.connectWaitSec * 1000) {
- sleep.millisecond(100);
- waited += 100;
- }
- if (!state.connected && !state.err) {
- state.err = "连接超时(" + config.connectWaitSec + " 秒内没有 onopen/onerror)";
- printl("❌ " + state.err);
- reconnectWebSocket();
- }
- }
- // ========== 断线重连 ==========
- function reconnectWebSocket() {
- if (state.reconnectAttempts >= config.maxReconnectAttempts) {
- printl("🛑 已达到最大重连次数 " + config.maxReconnectAttempts + ",停止重连");
- return;
- }
- state.reconnectAttempts++;
- printl("⏱️ 重连 " + state.reconnectAttempts + "/" + config.maxReconnectAttempts + "," + (config.reconnectInterval / 1000) + " 秒后重试...");
- printl("重连 " + state.reconnectAttempts + "/" + config.maxReconnectAttempts);
- // 先关旧连接
- try { if (ws) ws.close(); } catch (e) {}
- ws = null;
- setTimeout(function () {
- initWebSocket();
- }, config.reconnectInterval);
- }
- // ========== 截图并发送 ==========
- function sendScreenshot() {
- if (!ws || !state.connected) {
- print.log("跳过截图:未连接");
- return;
- }
- try {
- print.log("📸 截取屏幕...");
- printl("📸 截图中...");
- var screenshot = screen.screenShotFull();
- if (!screenshot) { printl("❌ 截图失败"); return; }
- print.log("🔄 转 Base64...");
- var base64Data = "" + screenshot.toBase64(); // 强转成 JS 字符串
- var sizeChars = base64Data.length;
- var sizeKB = Math.round((sizeChars * 0.75) / 1024); // 粗略估算真实字节
- printl("📦 图片大小: " + sizeChars + " 字符(约 " + sizeKB + " KB)");
- try { screenshot.recycle(); } catch (e) {} // 释放 Java Bitmap 内存
- state.totalSent++;
- printl("📤 发送图片 #" + state.totalSent + " ...");
- ws.send(base64Data);
- state.imgCount++;
- printl("✅ 已发送图片 #" + state.totalSent + "(" + sizeKB + " KB)");
- } catch (e) {
- printl("❌ 发送截图出错: " + e.message);
- print.log("sendScreenshot 异常: " + e.message);
- }
- }
- // ========== 定时截图定时器 ==========
- function startScreenshotTimer() {
- if (screenshotTimer) { try { clearInterval(screenshotTimer); } catch (e) {} }
- print.log("启动定时截图,间隔 " + config.screenshotInterval + " 毫秒");
- printl("⏰ 定时截图已启动(间隔 " + (config.screenshotInterval / 1000) + " 秒)");
- // 立即发第一张
- setTimeout(function () { sendScreenshot(); }, 300);
- screenshotTimer = setInterval(function () {
- if (state.connected) sendScreenshot();
- }, config.screenshotInterval);
- }
- function stopScreenshotTimer() {
- if (screenshotTimer) {
- try { clearInterval(screenshotTimer); } catch (e) {}
- screenshotTimer = null;
- print.log("停止定时截图");
- }
- }
- // ========== 关闭连接 ==========
- function disconnectWebSocket() {
- stopScreenshotTimer();
- if (ws) {
- try { ws.close(); } catch (e) {}
- ws = null;
- }
- state.connected = false;
- state.closed = true;
- printl("🔌 已关闭连接");
- }
- // ========== 主程序入口 ==========
- function main() {
- try {
- printl("========================================");
- printl(" WebSocket 屏幕截图传输 - 原生版");
- printl(" 服务器: " + config.serverUrl);
- printl(" 总运行: " + (config.runDuration / 1000) + " 秒 截图间隔: " + (config.screenshotInterval / 1000) + " 秒");
- printl(" 连接API: setSocketID → event(4回调) → connet → send → close");
- printl("========================================");
- printl("ℹ️ 确保 PC 已运行: python WebSocket测试服务器");
- // 启动连接(带异步重试)
- initWebSocket();
- // 总运行时长倒计时
- print.log("运行 " + (config.runDuration / 1000) + " 秒后自动结束");
- printl("⏳ 运行 " + (config.runDuration / 1000) + " 秒后自动结束");
- sleep.millisecond(config.runDuration);
- // 结束
- disconnectWebSocket();
- printl("");
- printl("===== 执行结束 =====");
- printl(" 尝试发送: " + state.totalSent + " 张");
- printl(" 计数显示: " + state.imgCount + " 张");
- if (state.saveDir) printl(" PC 保存目录: " + state.saveDir);
- print.log("===== 屏幕截图传输结束,发送 " + state.totalSent + " 张 =====");
- } catch (e) {
- print.log("主程序异常: " + e.message);
- printl("❌ 程序错误: " + e.message);
- try { disconnectWebSocket(); } catch (e2) {}
- }
- }
- main();
复制代码
| |  | |  |
|
unto无障碍方式双指向中间滑动放大缩小完整示例nextnocontent
|