//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();