aardio 文档

aardio 范例: HTTP-JSON-RPC 服务端

//HTTP-JSON-RPC 服务端

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=759;bottom=469)
mainForm.add(
edit={cls="edit";left=18;top=22;right=728;bottom=404;edge=1;multiline=1;z=1}
)
/*}}*/

import wsock.tcp.simpleHttpServer;
namespace wsock.tcp.simpleHttpServer{
    //startIp = "0.0.0.0"; //不限制本机 IP
    startPort = 8610; //不指定端口时会自动分配空闲端口
    threadGlobal = { mainForm = ..mainForm }; //指定 HTTP 服务线程的默认全局变量,注意定义线程函数的作用域同名变量不能是局部变量
}

mainForm.edit.print("http://127.0.0.1:8610/jsonrpc 已启动");

//io.open() //打开控制台查看线程错误信息
var url = wsock.tcp.simpleHttpServer.startUrl( 
    function(response,request){
        if( request.path !="/jsonrpc" ) response.error(404);  
        mainForm.edit.print(request.postData());

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

        //可以定义允许客户端调用的函数
        jsonServer.hello = function(name){
            mainForm.edit.print("hello 函数被调用了,参数:",name);

            /*
            第一个返回值为客户端返回值(result),
            第二个返回值为错误对象(error)
            */
            if(!name) return null,-32602/*_JSONRPC_INVALID_PARAMS*/; 
            return "hello " + name;
        }

        //也可以指定允许客户端调用的其他对象
        jsonServer.aardio = {

            /*
            如果函数名第一个字符为$,则第一个回调参数为$,
            $参数表示可以在jsonServer.rpc.run函数的参数中指定,如果不指定则默认为当前 request对象
            */
            $hello = function($,name){ 
                return "aardio.hello " + name;
            }

            err = function(){
                error("假装抛出异常试试",2)
            }   
        }

        /* 
            //下面这种写法也可以
            jsonServer.rpc.external = {
                hello = function(name){

                }
            } 
        */

        jsonServer.rpc.onError = function(err,requestData){
            //未捕获的服务端异常会触发这个函数,客户端错误代码为 _JSONRPC_INTERNAL_ERROR
            mainForm.edit.print("发生错误",err,requestData)
        }

        //运行服务端,可选在参数中指定回调$参数
        jsonServer.rpc.run();
    }
);  

mainForm.show();
win.loopMessage();

Markdown 格式