aardio 文档

aardio 范例: mDNS 设备发现

mDNS 发现 ADB 设备请参考

//mDNS
//mDNS 发现 ADB 设备请参考: https://www.aardio.com/zh-cn/docs/examples/Automation/adb/scrcpy.html
import win.ui;
/*DSG{{*/
var winform = win.form(text="mDNS 设备发现";right=600;bottom=400)
winform.add(
edit={cls="edit";left=10;top=50;right=590;bottom=390;edge=1;multiline=1;vscroll=1;z=2};
btnAdb={cls="button";text="发现 ADB 设备";left=10;top=10;right=140;bottom=40;z=1};
btnList={cls="button";text="查看已发现服务";left=150;top=10;right=290;bottom=40;z=3}
)
/*}}*/

import wsock.udp.mdnsClient;

var mdns = wsock.udp.mdnsClient();

// 核心:当服务完全解析后触发(已组合 IP + 端口)
mdns.onServiceResolved = function(service) {
    winform.edit.print("━━━ 发现服务 ━━━");
    winform.edit.print("  实例名: " ++ service.instanceName);
    winform.edit.print("  实例短名称: " ++ service.name);
    winform.edit.print("  主机名: " ++ service.host);
    winform.edit.print("  地址: " ++ service.ip ++ ":" ++ service.port);


    if(service.ipv6) {
        winform.edit.print("  IPv6: " ++ service.ipv6);
    }
    if(service.serviceType) {
        winform.edit.print("  类型: " ++ service.serviceType);
    }

    if(service.txtMap) {
        for k, v in service.txtMap {
            winform.edit.print("  [" + k + "] = " ++ v);
        }
    }
}

winform.btnAdb.oncommand = function() {
    winform.edit.text = "";
    mdns.clearCache();

    winform.edit.print("正在发现 ADB 设备...");

    // 同时查询连接服务和配对服务
    mdns.discover("_adb-tls-connect._tcp");
    mdns.discover("_adb-tls-pairing._tcp");
}

winform.btnList.oncommand = function() {
    winform.edit.print("══════ 已发现的服务列表 ══════");

    // 获取所有已解析的服务
    var services = mdns.getServices();

    if(#services == 0) {
        winform.edit.print("暂无已解析的服务");
        return;
    }

    for i, svc in services {
        winform.edit.print(i ++ ". " ++ svc.ip ++ ":" ++ svc.port);
        winform.edit.print("   " ++ svc.instanceName ++ '\r\n');
    }

    // 按类型过滤
    var adbServices = mdns.getServices("_adb-tls-connect");
    winform.edit.print("ADB 连接服务数量: " ++ #adbServices);
}

winform.onClose = function() {
    mdns.close();
}

winform.show();
win.loopMessage();
Markdown 格式