B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 1|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë

[¸´ÖÆÁ´½Ó]

1167

Ö÷Ìâ

1172

Ìû×Ó

7945

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7945
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷


AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë B2BÍøÂçÈí¼þ

AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë B2BÍøÂçÈí¼þ
AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë

AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë B2BÍøÂçÈí¼þ

AIWROKÊÖ»úÖ´ÐÐÆ÷MQTTä¯ÀÀÆ÷¿Ø¶Ë B2BÍøÂçÈí¼þ


  1. /**
  2. * AIWROK ÊÖ»úÖ´ÐÐÆ÷£¨MQTT Ⱥ¿Ø¶Ë£©
  3. * ------------------------------------------------------------------
  4. * ÅäÌ×£ºÖ¸»Ǫ́.html£¨µçÄÔä¯ÀÀÆ÷´ò¿ª£©
  5. * ×÷ÓãºÊÖ»úÁ¬ÉÏ MQTT ºó´ýÃü£¬µçÄÔ·¢Ö¸Áî ¡ú ÊÖ»úÖ´ÐÐ ¡ú ½á¹û»Ø´«
  6. *
  7. * Ö÷ÌâÔ¼¶¨£¨ROOM »»³ÉÄã×Ô¼ºµÄ·¿¼äºÅ£¬±ÜÃâºÍ±ðÈË´®Ì¨£©
  8. *   ÊÕ£ºaiwrok/<ROOM>/cmd/<±¾»ú»úºÅ>     Ö»·¢¸øÄ³Ò»Ì¨
  9. *   ÊÕ£ºaiwrok/<ROOM>/cmd/all            ¹ã²¥£¬ËùÓлúÆ÷¶¼Ö´ÐÐ
  10. *   ·¢£ºaiwrok/<ROOM>/ret/<±¾»ú»úºÅ>     ÐÄÌø + Ö´Ðнá¹û + ½ØÍ¼
  11. *
  12. * Ö§³ÖµÄÖ¸ÁJSON£©
  13. *   {"cmd":"PING"}
  14. *   {"cmd":"STATUS"}
  15. *   {"cmd":"SHOT"}                                  ½ØÍ¼»Ø´«
  16. *   {"cmd":"CLICK","x":540,"y":960}                 µã×ø±ê
  17. *   {"cmd":"SWIPE","x1":540,"y1":1400,"x2":540,"y2":500,"ms":300}   »¬¶¯
  18. *   {"cmd":"TEXT","text":"ÄãºÃ"}                     ÊäÈëÖÐÎÄ
  19. *   {"cmd":"APP","pkg":"com.tencent.mm"}            ´ò¿ªÓ¦ÓÃ
  20. *   {"cmd":"HOME"} / {"cmd":"BACK"}
  21. *   {"cmd":"LOOP","act":"SWIPE","count":30,"min":1500,"max":4000}  Ñ­»·Ñø»ú
  22. *   {"cmd":"STOP"}                                  ֹͣѭ»·
  23. *   ´ø "id":"xxx" µÄ»ØÖ´»áÔ­Ñù´ø»Ø£¬·½±ãµçÄÔÅä¶Ô
  24. * ------------------------------------------------------------------
  25. */

  26. // ==================== ÅäÖãºÖ»¸ÄÕâÈýÐÐ ====================
  27. var ROOM      = "room001";                 // ·¿¼äºÅ£¬¶ą̀µçÄÔ/¶àÌ×É豸ÓÃËü¸ôÀë
  28. var DEV_ID    = "";                        // »úºÅ£¬Áô¿Õ=×Ô¶¯Óà IMEI ºó 6 λ
  29. var BROKER    = "tcp://broker.emqx.io:1883";
  30. var SHOT_MAXW = 540;      // »Ø´«½ØÍ¼×î´ó¿í¶È£¬³¬³öµÈ±ÈËõС
  31. var SHOT_QUAL = 60;       // JPEG ÖÊÁ¿ 1-100£¬µ÷С¸üÊ¡Á÷Á¿¸ü²»Ò×µôÏß
  32. // ========================================================

  33. var T = {
  34.     cmdMine : "", cmdAll : "", ret : ""
  35. };

  36. // ---------- ÈÕÖ¾ ----------
  37. // ÖØÒª£ºprintl Ö»ÄÜÔڽű¾Ö÷Ï̵߳÷Óá£Paho µÄ»Øµ÷£¨ÊÕÏûÏ¢/µôÏߣ©ÅÜÔÚ±ðµÄ
  38. // Java Ïß³ÌÉÏ£¬ÔÚÄÇÀïÖ±½Ó printl »áÅ×Òì³£²¢´òËÀÏûÏ¢ÅÉ·¢Ị̈߳¬±íÏÖΪ
  39. // "Ö»ÊÕµ½µÚÒ»ÌõÖ¸Á֮ºóÈ«²¿¶ªÊ§£¬×îºó 32000 ³¬Ê±µôÏß"¡£
  40. // ËùÒԻص÷ÀïÖ»Èë¶Ó£¬ÓÉÖ÷Ï̶߳¨Ê±Æ÷ͳһˢ³ö¡£
  41. var IN_CALLBACK = false;
  42. var LOGQ = [];

  43. function log(s) {
  44.     if (IN_CALLBACK) {
  45.         if (LOGQ.length < 500) LOGQ.push(s);   // »Øµ÷Ị̈߳ºÖ»Èë¶Ó£¬¾ø²» printl
  46.     } else {
  47.         try { printl("[Ö´ÐÐÆ÷] " + s); } catch (e) {}
  48.     }
  49. }
  50. function logk(s) { log(s); }

  51. // Ö÷Ïß³ÌË¢ÈÕÖ¾¶ÓÁÐ
  52. function flushLog() {
  53.     var n = 0;
  54.     while (LOGQ.length > 0 && n < 30) {
  55.         try { printl("[Ö´ÐÐÆ÷] " + LOGQ.shift()); } catch (e) { LOGQ.length = 0; break; }
  56.         n++;
  57.     }
  58. }

  59. // ==================== 1. ¼ÓÔØ Paho ====================
  60. var dexName = "paho-mqtt.dex";
  61. try {
  62.     rhino.loadDex(dexName);
  63.     log("dex ÒѼÓÔØ");
  64. } catch (e) {
  65.     log("loadDex Ìø¹ý£¨¿ÉÄÜϵͳÒÑ×Ô¶¯¼ÓÔØ²å¼þ£©£º" + e.message);
  66. }

  67. try {
  68.     importClass(Packages.org.eclipse.paho.client.mqttv3.MqttClient);
  69.     importClass(Packages.org.eclipse.paho.client.mqttv3.MqttConnectOptions);
  70.     importClass(Packages.org.eclipse.paho.client.mqttv3.MqttCallback);
  71.     importClass(Packages.org.eclipse.paho.client.mqttv3.MqttMessage);
  72.     importClass(Packages.org.eclipse.paho.client.mqttv3.persist.MemoryPersistence);
  73.     log("Paho ÀർÈë³É¹¦");
  74. } catch (e) {
  75.     log("Paho ÀർÈëʧ°Ü£º" + e.message);
  76.     log("Çë°Ñ paho-mqtt.dex ·Åµ½±¾¹¤³ÌµÄ ²å¼þ\\ Ŀ¼ºóÖØÅÜ");
  77.     exit();
  78. }

  79. // ==================== 2. É豸ÐÅÏ¢ ====================
  80. function deviceInfo() {
  81.     var o = { brand: "?", model: "?", imei: "", w: 0, h: 0, android: "?" };
  82.     try { o.brand = "" + device.getBrand(); } catch (e) {}
  83.     try { o.model = "" + device.getModel(); }  catch (e) {}
  84.     try { o.imei  = "" + device.getIMEI(); }   catch (e) {}
  85.     try { o.w = screen.getScreenWidth(); o.h = screen.getScreenHeight(); } catch (e) {}
  86.     try { o.android = "" + java.lang.System.getProperty("os.version"); } catch (e) {}
  87.     return o;
  88. }
  89. var INFO = deviceInfo();
  90. if (!DEV_ID) {
  91.     DEV_ID = INFO.imei ? ("" + INFO.imei).slice(-6) : ("dev" + Math.floor(Math.random() * 10000));
  92. }
  93. DEV_ID = "" + DEV_ID;
  94. T.cmdMine = "aiwrok/" + ROOM + "/cmd/" + DEV_ID;
  95. T.cmdAll  = "aiwrok/" + ROOM + "/cmd/all";
  96. T.ret     = "aiwrok/" + ROOM + "/ret/" + DEV_ID;

  97. // ==================== 3. ״̬ ====================
  98. var client = null, connected = false;
  99. var needReconnect = false;   // µôÏß±ê¼Ç£¬Ö÷Ï߳̿´ÃŹ·´¦Àí
  100. var startAt = (new Date()).getTime();
  101. var nRecv = 0, nSent = 0, nRun = 0;
  102. var loopOn = false;          // Ñ­»·ÈÎÎñ¿ª¹Ø
  103. var CMDQ = [];               // Ö¸Áî¶ÓÁУº»Øµ÷Ïß³ÌÈë¶Ó£¬Ö÷Ïß³ÌÖ´ÐÐ

  104. // ==================== 4. »Ø´« ====================
  105. function report(obj, retain) {
  106.     if (!connected) { log("δÁ¬½Ó£¬»Ø´«¶ªÆú£º" + obj.type); return; }
  107.     try {
  108.         // ÿÌõ¶¼´øÉ豸ÐÅÏ¢£¬Ö¸»Ǫ́Íí´ò¿ªÒ²ÄÜÁ¢¿ÌÏÔÊ¾Æ·ÅÆÐÍºÅÆÁÄ»
  109.         obj.dev = DEV_ID; obj.room = ROOM;
  110.         obj.brand = INFO.brand; obj.model = INFO.model;
  111.         obj.screen = INFO.w + "x" + INFO.h;
  112.         obj.ts = (new Date()).getTime();
  113.         var m = new MqttMessage();
  114.         m.setPayload(new java.lang.String(JSON.stringify(obj)).getBytes("UTF-8"));
  115.         m.setQos(retain ? 1 : 0);
  116.         if (retain) m.setRetained(true);   // ÉÏÏßÏûÏ¢±£Áô£¬ÐÂÁ¬½ÓµÄÍøÒ³Á¢¿ÌÄÜ¿´µ½
  117.         client.publish(T.ret, m);
  118.         nSent++;
  119.     } catch (e) { log("»Ø´«Ê§°Ü£º" + e.message); }
  120. }

  121. // ==================== 5. Ö¸ÁîʵÏÖ ====================
  122. function doClick(x, y) {
  123.     auto.clickPoint(x, y);
  124.     return { x: x, y: y };
  125. }
  126. function doSwipe(o) {
  127.     var x1 = o.x1 || INFO.w / 2, y1 = o.y1 || INFO.h * 0.75;
  128.     var x2 = o.x2 || INFO.w / 2, y2 = o.y2 || INFO.h * 0.25;
  129.     var ms = o.ms || 300;
  130.     auto.swip(x1, y1, x2, y2, ms, 0);
  131.     return { x1: x1, y1: y1, x2: x2, y2: y2, ms: ms };
  132. }
  133. function doText(t) {
  134.     input.sendString(t);
  135.     return { len: ("" + t).length };
  136. }
  137. function doShot() {
  138.     var bmp = screen.screenShotFull();
  139.     if (!bmp) throw new Error("½ØÍ¼·µ»Ø¿Õ");
  140.     var b64 = null;
  141.     try {
  142.         // ÏȵȱÈËõ·Åµ½ shotMaxW ¿í£¬ÔÙѹ³É JPEG£º
  143.         // ԭʼ PNG base64 ¶¯éü 200KB£¬´ó°üÈÝÒ×ÈÃÁ¬½Ó³¬Ê±µôÏß
  144.         var w = bmp.getWidth(), h = bmp.getHeight();
  145.         var target = bmp;
  146.         var from = null;
  147.         try {
  148.             if (w > SHOT_MAXW) {
  149.                 var sc = SHOT_MAXW / w;
  150.                 var m = new Packages.android.graphics.Matrix();
  151.                 m.postScale(sc, sc);
  152.                 target = Packages.android.graphics.Bitmap.createBitmap(bmp, 0, 0, w, h, m, true);
  153.                 from = target;
  154.             }
  155.         } catch (eScale) { target = bmp; }

  156.         var bos = new java.io.ByteArrayOutputStream();
  157.         target.compress(Packages.android.graphics.Bitmap.CompressFormat.JPEG, SHOT_QUAL, bos);
  158.         var bytes = bos.toByteArray();
  159.         b64 = "" + Packages.android.util.Base64.encodeToString(bytes, Packages.android.util.Base64.NO_WRAP);
  160.         if (from) { try { from.recycle(); } catch (e2) {} }
  161.     } catch (e) {
  162.         // ѹËõÁ´Â·Ê§°Ü£ºÍË»ØÔ­Í¼ base64£¬ÖÁÉÙ½ØÍ¼¹¦ÄÜ»¹ÄÜÓÃ
  163.         try { b64 = "" + bmp.toBase64(); } catch (e5) { b64 = null; }
  164.     }
  165.     if (!b64 || b64.length < 32) {
  166.         try { bmp.recycle(); } catch (e3) {}
  167.         throw new Error("½ØÍ¼Ñ¹Ëõʧ°Ü");
  168.     }
  169.     try { bmp.recycle(); } catch (e4) {}
  170.     var kb = Math.round(b64.length / 1024);
  171.     if (kb > 400) throw new Error("½ØÍ¼ÈÔ¹ý´ó " + kb + "KB£¬Çëµ÷С shotMaxW »ò shotQuality");
  172.     return { img: b64, kb: kb };
  173. }
  174. function doApp(pkg) {
  175.     app.openApp(pkg);
  176.     return { pkg: pkg };
  177. }
  178. function doHome() { auto.home(); return {}; }
  179. function doBack() {
  180.     // ²»Í¬°æ±¾·½·¨Ãû¿ÉÄܲ»Í¬£¬Öð¸öÊÔ£¬Ê§°ÜÒ²´òÈÕÖ¾
  181.     if (typeof auto.back === "function") { auto.back(); return {}; }
  182.     throw new Error("´Ë°æ±¾ auto ÎÞ back()£¬¿ÉÓà CLICK µã·µ»Ø¼ü×ø±ê");
  183. }

  184. // Ñ­»·Ñø»ú£º·´¸´×öͬһ¸ö¶¯×÷ + Ëæ»úµÈ´ý£¬Ä£ÄâÕæÈË
  185. function runLoop(o) {
  186.     loopOn = true;
  187.     var act = o.act || "SWIPE";
  188.     var count = o.count || 0;          // 0 = ÎÞÏÞ£¬Ö±µ½ STOP
  189.     var minMs = o.min || 2000, maxMs = o.max || 6000;
  190.     var i = 0;
  191.     logk("Ñ­»·¿ªÊ¼ act=" + act + " count=" + count);
  192.     report({ type: "LOOP", state: "start", act: act, count: count });

  193.     (function step() {
  194.         if (!loopOn) { logk("Ñ­»·ÒÑÍ£Ö¹£¬¹² " + i + " ´Î"); report({ type: "LOOP", state: "stop", times: i }); return; }
  195.         try {
  196.             if (act === "SWIPE") doSwipe(o);
  197.             else if (act === "SHOT") { var r = doShot(); report({ type: "SHOT", ok: true, kb: r.kb, img: r.img }); }
  198.             else if (act === "CLICK") doClick(o.x || INFO.w / 2, o.y || INFO.h / 2);
  199.             nRun++;
  200.             i++;
  201.             if (i % 10 === 0) { log("Ñ­»·½ø¶È " + i + " ´Î"); report({ type: "LOOP", state: "run", times: i }); }
  202.         } catch (e) {
  203.             log("Ñ­»·µ¥´Îʧ°Ü£º" + e.message);
  204.             report({ type: "LOOP", state: "err", err: e.message, times: i });
  205.         }
  206.         if (count > 0 && i >= count) {
  207.             loopOn = false;
  208.             logk("Ñ­»·Íê³É " + i + " ´Î");
  209.             report({ type: "LOOP", state: "done", times: i });
  210.             return;
  211.         }
  212.         var wait = minMs + Math.floor(Math.random() * Math.max(1, maxMs - minMs));
  213.         setTimeout(step, wait);
  214.     })();
  215. }

  216. // ==================== 6. Ö¸Áî·Ö·¢ ====================
  217. function handle(raw, from) {
  218.     nRecv++;
  219.     var o;
  220.     try { o = JSON.parse(raw); }
  221.     catch (e) { log("·Ç JSON Ö¸ÁºöÂÔ£º" + raw); return; }

  222.     var cmd = (o.cmd || "").toUpperCase();
  223.     log("ÊÕµ½ " + cmd + " À´×Ô " + from + " id=" + (o.id || "-"));

  224.     var res = { type: "ACK", cmd: cmd, id: o.id || "" };
  225.     try {
  226.         if (cmd === "PING")       { res.ok = true; res.msg = "pong"; }
  227.         else if (cmd === "STATUS"){
  228.             res.ok = true;
  229.             res.info = { brand: INFO.brand, model: INFO.model, screen: INFO.w + "x" + INFO.h,
  230.                          android: INFO.android, up: Math.round(((new Date()).getTime() - startAt) / 1000),
  231.                          recv: nRecv, sent: nSent, run: nRun, loop: loopOn, connected: connected };
  232.         }
  233.         else if (cmd === "CLICK") { res.ok = true; res.data = doClick(parseInt(o.x, 10), parseInt(o.y, 10)); }
  234.         else if (cmd === "SWIPE") { res.ok = true; res.data = doSwipe(o); }
  235.         else if (cmd === "TEXT")  { res.ok = true; res.data = doText(o.text || ""); }
  236.         else if (cmd === "SHOT")  {
  237.             log("½ØÍ¼ÖС­");
  238.             var r = doShot();
  239.             res.ok = true; res.kb = r.kb; res.img = r.img;   // ½ØÍ¼Ö±½Ó´øÍ¼»Ø´«
  240.             log("½ØÍ¼Íê³É " + r.kb + "KB");
  241.         }
  242.         else if (cmd === "APP")   { res.ok = true; res.data = doApp(o.pkg); }
  243.         else if (cmd === "HOME")  { res.ok = true; doHome(); }
  244.         else if (cmd === "BACK")  { res.ok = true; doBack(); }
  245.         else if (cmd === "LOOP")  { runLoop(o); res.ok = true; res.msg = "Ñ­»·ÒÑÆô¶¯"; }
  246.         else if (cmd === "STOP")  { loopOn = false; res.ok = true; res.msg = "ÒÑ·¢ËÍÍ£Ö¹"; }
  247.         else { res.ok = false; res.err = "δָ֪Áî " + cmd; }
  248.     } catch (e) {
  249.         res.ok = false; res.err = "" + e.message;
  250.         log("Ö´ÐÐʧ°Ü£º" + e.message);
  251.     }
  252.     report(res);
  253. }

  254. // ==================== 7. Á¬½Ó ====================
  255. function connect() {
  256.     var cid = "aiwrok_" + ROOM + "_" + DEV_ID + "_" + Math.floor(Math.random() * 1000);
  257.     logk("Á¬½Ó " + BROKER + "  clientId=" + cid);
  258.     client = new MqttClient(BROKER, cid, new MemoryPersistence());

  259.     var opt = new MqttConnectOptions();
  260.     opt.setCleanSession(true);
  261.     opt.setKeepAliveInterval(45);
  262.     opt.setConnectionTimeout(15);
  263.     opt.setAutomaticReconnect(true);

  264.     client.setCallback(new MqttCallback({
  265.         connectionLost: function (c) {
  266.             IN_CALLBACK = true;
  267.             try {
  268.                 connected = false;
  269.                 needReconnect = true;
  270.                 log("µôÏߣº" + c + "£¨µÈÖ÷Ï߳̿´ÃŹ·ÖØÁ¬£©");
  271.             } catch (e) {} finally { IN_CALLBACK = false; }
  272.         },
  273.         messageArrived: function (topic, msg) {
  274.             IN_CALLBACK = true;                 // ±¾Ï߳̽ûÖ¹ printl / ½ûÖ¹×öÖØ»î
  275.             try {
  276.                 var text = "" + new java.lang.String(msg.getPayload(), "UTF-8");
  277.                 var from = ("" + topic === T.cmdAll) ? "¹ã²¥" : "¶¨Ïò";
  278.                 // Ö»Èë¶Ó£¬ÕæÕýµÄÖ´Ðн»¸øÖ÷Ị̈߳¨½ØÍ¼/µã»÷Ôڻص÷Ïß³ÌÀï»á¿¨×¡ MQTT ¶ÁÑ­»·£©
  279.                 if (CMDQ.length < 200) CMDQ.push({ raw: text, from: from });
  280.             } catch (e) {
  281.                 // ¾ø²»°ÑÒì³£Å×»Ø Paho£¬·ñÔòÅÉ·¢Ï̻߳ᱻ´òËÀ
  282.                 if (LOGQ.length < 500) LOGQ.push("ÊÕ°üÒì³££º" + e.message);
  283.             } finally { IN_CALLBACK = false; }
  284.         },
  285.         deliveryComplete: function (t) { }
  286.     }));

  287.     client.connect(opt);
  288.     connected = true;
  289.     needReconnect = false;
  290.     client.subscribe(T.cmdMine, 1);
  291.     client.subscribe(T.cmdAll, 1);
  292.     logk("ÒѶ©ÔÄ " + T.cmdMine + " ºÍ " + T.cmdAll);
  293.     report({ type: "ONLINE" }, true);        // ±£ÁôÏûÏ¢£ºÍøÒ³ºó¿ªÒ²ÄÜ¿´µ½
  294.     flushLog();
  295. }

  296. // ==================== 8. Æô¶¯ ====================
  297. logk("Æô¶¯ »úºÅ=" + DEV_ID + " ·¿¼ä=" + ROOM + " ÆÁÄ»=" + INFO.w + "x" + INFO.h + " " + INFO.brand + " " + INFO.model);
  298. try { connect(); }
  299. catch (e) { connected = false; needReconnect = true; log("Ê×´ÎÁ¬½Óʧ°Ü£º" + e.message + "£¬¿´ÃŹ·»á³ÖÐøÖØÊÔ"); }

  300. // ---------- Ö÷Ï߳̿´ÃŹ·£ºË¢ÈÕÖ¾ + ÖØÁ¬ + ÖØ¶©ÔÄ ----------
  301. // »Øµ÷Ï̲߳»ÄÜ printl£¬ÈÕÖ¾¿¿ÕâÀïË¢³öÀ´£»ÖØÁ¬ºó±ØÐëÖØÐ¶©ÔÄ£¬
  302. // ÒòΪ cleanSession=true ʱ Paho ²»»áÌæÄã»Ö¸´¶©ÔÄ¡£
  303. var resubTried = 0;
  304. setInterval(function () {
  305.     // 1) Ö÷Ïß³ÌÖ´ÐÐÅŶӵÄÖ¸Áî
  306.     var k = 0;
  307.     while (CMDQ.length > 0 && k < 5) {
  308.         var job = CMDQ.shift();
  309.         try { handle(job.raw, job.from); }
  310.         catch (e) { log("Ö¸ÁîÖ´ÐÐÒì³££º" + e.message); }
  311.         k++;
  312.     }
  313.     flushLog();                                 // 2) Ë¢³ö»Øµ÷ÔÜϵÄÈÕÖ¾
  314.     try {
  315.         var real = client ? client.isConnected() : false;

  316.         if (real && !connected) {                     // ×Ô¶¯ÖØÁ¬³É¹¦ÁË
  317.             connected = true; needReconnect = false;
  318.             try {
  319.                 client.subscribe(T.cmdMine, 1);
  320.                 client.subscribe(T.cmdAll, 1);
  321.                 log("Òѻָ´Á¬½Ó²¢ÖØÐ¶©ÔÄ");
  322.             } catch (e) { log("ÖØ¶©ÔÄʧ°Ü£º" + e.message); }
  323.             report({ type: "ONLINE" }, true);
  324.         }

  325.         if (!real && client) {                        // µôÏߣºÖ÷¶¯ÖØÁ¬
  326.             connected = false;
  327.             resubTried++;
  328.             if (resubTried % 8 === 0) {               // Լÿ 8 ÃëÊÔÒ»´Î
  329.                 log("¿´ÃŹ·´¥·¢ÖØÁ¬¡­");
  330.                 try { client.reconnect(); }
  331.                 catch (e) {
  332.                     log("reconnect ʧ°Ü£º" + e.message + "£¬Öؽ¨Á¬½Ó");
  333.                     try { connect(); } catch (e2) { log("ÖØ½¨Ê§°Ü£º" + e2.message); }
  334.                 }
  335.             }
  336.         }
  337.     } catch (e) { log("¿´ÃŹ·Òì³££º" + e.message); }
  338. }, 1000);

  339. // ---------- ÐÄÌø£ºµçÄԶ˾ݴËÅжÏÔÚÏß ----------
  340. var needShot = false;   // ¸Ä³É true Ôòÿ´ÎÐÄÌø¸½´øÒ»ÕŽØÍ¼
  341. var beat = 0;
  342. setInterval(function () {
  343.     beat += 1;
  344.     if (connected) {
  345.         var o = { type: "HEART", up: beat * 20, recv: nRecv, sent: nSent, run: nRun, loop: loopOn };
  346.         if (needShot) { try { var r = doShot(); o.img = r.img; o.kb = r.kb; } catch (e) {} }
  347.         report(o);
  348.     } else {
  349.         log("µ±Ç°ÀëÏߣ¬ÐÄÌøÌø¹ý£¨¿´ÃŹ·ÖØÁ¬ÖУ©");
  350.     }
  351. }, 20000);
  352. log("ÒѽøÈë´ýÃü£ºÃ¿ 1 ÃëË¢ÈÕÖ¾/²éÁ¬½Ó£¬Ã¿ 20 ÃëÉϱ¨ÐÄÌø¡£Í£Ö¹Çëµã IDE Í£Ö¹°´Å¥");
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-9-2 08:02 , Processed in 0.101620 second(s), 35 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí