aardio 文档

aardio 范例: RPC 服务端 - 支持任意本地网页调用 aardio 函数

//Node.js 回调 aardio
import win.ui;
/*DSG{{*/
var winform = win.form(text="RPC 服务端 - 支持任意本地网页调用 aardio 函数";right=759;bottom=469)
winform.add(
button={cls="button";text="调用 Node.js 函数";left=480;top=410;right=630;bottom=449;db=1;dr=1;z=2};
edit={cls="richedit";left=23;top=24;right=730;bottom=380;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1}
)
/*}}*/

winform.edit.print("正在启动 Node.js");
winform.show();

import web.rpc.externalServer;
var externalServer = web.rpc.externalServer();

//定义允许 Node.js 调用的 aardio 函数
externalServer.external = {
    test = function(...){
        winform.button.disabled = false;
        winform.edit.print("external.test 被调用",...)
        return "aardio 函数返回的值"
    }
    tag = function(strs,...){
        var args = {...}
        for(i=#args;1;-1){
            table.insert(strs,args[i],i+1);
        }

        strs = string.join(strs);
        return strs;
    }
}

//启动 aardio-rpc 服务端
externalServer.start();

winform.button.disabled = true;
winform.button.oncommand = function(id,event){
    externalServer.publish("testJs",1,2,3);
}

import nodeJs;

var js  =/*
var aardio = require('aardio') 
aardio.test(123).then( v=>{ console.log(v) } );

aardio.on("testJs",function(...values){
    console.log("Node.js 函数 testJs 被调用",...values) 
})

//用 aardio 解析模板字符串
const $ = aardio.tag;
$`abc${123}ddd${456}`.then( v=> console.log("模板字符串:",v)  )
*/

//自动安装 JS 代码中引用的模块,如果已经安装了模块,这句代码会自动忽略不执行
nodeJs.prequireByJs(winform.edit,js);

//运行 Node.js 代码,如果改用 nodeJs.startRpc() 则 JS 里 console.log 不可用
var node = nodeJs.exec(js); 

//窗体退出时结束 nodeJs 进程
winform.onDestroy = function(){
    node.ctrlEvent(0)
}

//将 Node.js 进程输出显示到文本框,不会阻塞进程
node.logResponse(winform.edit);

win.loopMessage();
Markdown 格式