public static void InjectShareMemoryObjects(this IServiceNode target)
        {
            //create/release all these objects inside the runtime internal context, this make sure all objects can be destroyed even user context is released
            var converter = target.GetService <IJSValueConverterService>();

            //var switchService = target.ServiceNode.GetService<IRuntimeService>().InternalContextSwitchService;
            if (converter.CanConvert <JSArrayBuffer>())
            {
                return;
            }

            converter.RegisterConverter <JSArrayBuffer>(
                (node, value) =>
            {
                var jsValueService = node.GetService <IJSValueService>();
                return(jsValueService.CreateArrayBuffer(value));
            },
                (node, value) =>
            {
                var switchService = node.GetService <IRuntimeService>().InternalContextSwitchService;
                return(switchService.With <JSArrayBuffer>(() =>
                {
                    if (value.ValueType != JavaScriptValueType.ArrayBuffer)
                    {
                        throw new InvalidOperationException("source type should be ArrayBuffer");
                    }
                    IntPtr buffer = JavaScriptValue.GetArrayBufferStorage(value, out uint size);
                    var result = JSArrayBuffer.CreateFromJS(buffer, size, value, switchService);
                    return result;
                }));
            }, false
Пример #2
0
        public void ArrayBufferSetGet_CreateInDotnet()
        {
            JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize);

            buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize);
            smoSetGet(buffer);
            buffer.Dispose();
        }
Пример #3
0
        public void ArrayBufferReadWrite_CreateInDotnet()
        {
            JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize);

            buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize);
            smoAdd(buffer, "arrayBufferAdd");
            buffer.Dispose();
        }
Пример #4
0
        public void ArrayBufferSetGet_InJavascript()
        {
            JSArrayBuffer buffer = JSArrayBuffer.CreateInJavascript((uint)payloadSize, (b) =>
            {
                b.WriteArray(0, payloadToJS, 0, payloadSize);
            });

            smoSetGet(buffer);
            buffer.Dispose();
        }
Пример #5
0
        public void ArrayBufferSetGet_FromExternal()
        {
            var           p      = Marshal.AllocHGlobal(payloadSize);
            JSArrayBuffer buffer = JSArrayBuffer.CreateFromExternal(p, (ulong)payloadSize);

            buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize);
            smoSetGet(buffer);
            buffer.Dispose();
            Marshal.FreeHGlobal(p);
        }
Пример #6
0
        public void ArrayBufferReadWrite_InJavascript()
        {
            JSArrayBuffer buffer = JSArrayBuffer.CreateInJavascript((uint)payloadSize, (b) =>
            {
                b.WriteArray(0, payloadToJS, 0, payloadSize);
            });

            smoAdd(buffer, "arrayBufferAdd");
            buffer.Dispose();
        }
Пример #7
0
        public void TypedArraySetGet_CreateFromArrayBuffer()
        {
            JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize);
            JSTypedArray  array  = JSTypedArray.CreateFromArrayBuffer(JavaScriptTypedArrayType.Int8, buffer, 0, (uint)payloadSize);

            array.Buffer.WriteArray(0, payloadToJS, 0, payloadSize);
            smoSetGet(array);
            array.Dispose();
            buffer.Dispose();
        }
Пример #8
0
        public void DataViewSetGet_CreateInDotnet()
        {
            JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize);

            buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize);
            JSDataView view = JSDataView.CreateFromArrayBuffer(buffer, 0, (uint)payloadSize, null);

            smoSetGet(view);
            view.Dispose();
            buffer.Dispose();
        }
Пример #9
0
        public void DataViewSetGet_CreateInJS()
        {
            JSArrayBuffer buffer = JSArrayBuffer.CreateInJavascript((uint)payloadSize, null);
            JSDataView    view   = JSDataView.CreateFromArrayBuffer(buffer, 0, (uint)payloadSize, (b) =>
            {
                b.WriteArray(0, payloadToJS, 0, payloadSize);
            });

            smoSetGet(view);
            view.Dispose();
            buffer.Dispose();
        }