aardio 文档

aardio 范例: WebView2 传输二进制字节串

import win.ui;
/*DSG{{*/
var winform = win.form(text="WebView2 传输二进制字节串";right=757;bottom=467)
winform.add()
/*}}*/

import web.view;
var wb = web.view(winform);

var imageBuffer = string.loadBuffer("~\example\Graphics\.gdip.jpg");

import wsock.tcp.asyncHttpServer;

//如果建立 aardio 工程下面这句可以省略
wb.asyncHttpServer = wsock.tcp.asyncHttpServer();

//下面模拟 aardio 工程文件结构,如果建立了工程下面的代码都可以省略。
wb.asyncHttpServer.run({

    //处理 HTTP 请求
    ["/res/image.aardio"] = function(){
        response.contentType = "image/jpeg";
        response.writeBuffer(imageBuffer);//输出图像数据
    };

    //响应 HTTP 请求,直接回复 HTML 代码
    ["/index.html"] = /***
<img id="native-image" src="res/image.aardio"> 网页里写相对路径就可以
<script> (async()=>{

    setNativeBuffer = function(nativeBuffer){

        //如果参数来自 aardio 中的 wb.xcall 调用。
        if(!Array.isArray(nativeBuffer)) {
            //则 aardio 使用 与 Node.js 相同的 JSON 格式转换 buffer,字节数组在 data 字段内。
            nativeBuffer = nativeBuffer.data;
        }

        //nativeBuffer 本身也已转换为纯 JS 数组,下面是将 JS 数组转换为 uint8 类型化数组。
        var uint8Array = new Uint8Array(nativeBuffer);

        //自内存加载图像
        var blob = new Blob([uint8Array], { type: 'image/jpeg' });
        var imageUrl = URL.createObjectURL(blob);
        document.getElementById('native-image').src = imageUrl;

        //uint8Array.size = uint8Array.length; //记录数组长度,避免类型化数组的内置属性在本地接口中被隐藏 
        //aardio.setJsTypedArrayByRef(uint8Array);//将 JavaScript 的 uint8Array 传给 aardio

        //更简单的方法是转换为可以直接传值给 aardio 的普通 JS 数组。
        var byteArray = Array.from( uint8Array )
        aardio.setJsByteArray( byteArray );
    }

    //自 aardio 获取二进制数据  
    var nativeBuffer = await aardio.getNativeBuffer( ); 

    setNativeBuffer(nativeBuffer);   
})() </script> 
***/ 
} );

wb.external = {
    getNativeBuffer = function(){ 
        return imageBuffer;
    };
    setJsTypedArrayByRef = function(jsUint8Array){  
        //print("数组长度",jsUint8Array.size); 
        //print("数组元素",jsUint8Array[0]);// JS 数组起始索引为 0   
    }; 
    setJsByteArray = function(byteArray){  
        //JS 数组转换为 buffer 
        var buf = raw.buffer({BYTE data[]=byteArray})

        //写入 buffer 到文件
        //io.file.write("/test.jpg",buf);
    };
}

//打开网页,自动识别并支持 wsock.tcp.asyncHttpServer 或 wsock.tcp.simpleHttpServer 服务端
wb.go("/index.html");

//传 buffer 给 JS 函数
wb.xcall("setNativeBuffer",imageBuffer);

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