aardio 文档

aardio 范例: ping

import win.ui;
import fonts.fontAwesome;
/*DSG{{*/
var winform = win.form(cls="PING_FORM";text="PING测试";right=599;bottom=399;max=false;min=false)
winform.add(
listbox={cls="listbox";left=7;top=8;right=590;bottom=388;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;edge=1;items={};ownerDraw=1;z=1};
loading={cls="plus";left=461;top=298;right=552;bottom=372;bgcolor=0xFFFFFF;clipBk=false;font=LOGFONT(h=-29;name='FontAwesome');z=2}
)
/*}}*/

//设定自绘每行的高度
winform.listbox.onMeasureItem = function(measureItem){
    measureItem.itemHeight = winform.listbox.dpiScale(16);  
}

//自绘列表项
winform.listbox.onDrawItem = function(drawItem){
    var text = winform.listbox.getItemText( drawItem.itemID + 1 )
    ::SetTextColor(drawItem.hDC,winform.listbox.ipColors[drawItem.itemID + 1] );
    ::DrawText(drawItem.hDC,text,#text,drawItem.rcItem,0x20/*_DT_SINGLELINE*/);
}
winform.show(); 

winform.listbox.ipColors = {};
winform.listbox.addIp = function(clr,ip,label){
    winform.listbox.add( ip + ": " + (label || "Failed") )
    winform.listbox.ipColors[winform.listbox.count] = clr   
}

//线程启动函数
var pingThread = function( ip,winform ) {

    import icmp.ping; //线程内使用的库必须在线程内导入
    var ping = icmp.ping(); //创建 PING 工具(基于系统 API 函数 IcmpSendEcho ),

    for(i=1;4;1){
        if( ping.perform(ip) ){
             winform.listbox.addIp(0xF00,ip,string.format( "Reply from %s: bytes=%d time=%dms TTL=%d"
                , ping.ip , #ping.requestData  , ping.echoReply.roundTripTime , ping.echoReply.options.ttl ) ); 

            return ping.echoReply; //此返回值由 manage.waitClose 函数作为调用 onEnd 回调函数的 echoReply 参数。
        }  
        sleep(10)
    }  

    winform.listbox.addIp(0x0f0,ip) 
} 

import thread.manage;
manage = thread.manage(3) 
manage.createSuspended(pingThread,"www.example.com",winform).onEnd = function(echoReply){
    //线程执行完回调此函数
}
manage.createSuspended(pingThread,"www.aardio.com",winform).onEnd = function(echoReply){
    //线程执行完回调此函数        
}

//在文本框右下角显示加载进度动画。
winform.loading.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'}
manage.waitClose(); //等待所有线程结束,必须调用此函数才能在线程结束时触发前面指定的 onEnd 回调。

winform.loading.disabledText = null;

win.loopMessage();
Markdown 格式