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
public void ArrayBufferSetGet_CreateInDotnet() { JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize); buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize); smoSetGet(buffer); buffer.Dispose(); }
public void ArrayBufferReadWrite_CreateInDotnet() { JSArrayBuffer buffer = JSArrayBuffer.Create(payloadSize); buffer.Buffer.WriteArray(0, payloadToJS, 0, payloadSize); smoAdd(buffer, "arrayBufferAdd"); buffer.Dispose(); }
public void ArrayBufferSetGet_InJavascript() { JSArrayBuffer buffer = JSArrayBuffer.CreateInJavascript((uint)payloadSize, (b) => { b.WriteArray(0, payloadToJS, 0, payloadSize); }); smoSetGet(buffer); buffer.Dispose(); }
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); }
public void ArrayBufferReadWrite_InJavascript() { JSArrayBuffer buffer = JSArrayBuffer.CreateInJavascript((uint)payloadSize, (b) => { b.WriteArray(0, payloadToJS, 0, payloadSize); }); smoAdd(buffer, "arrayBufferAdd"); buffer.Dispose(); }
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(); }
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(); }
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(); }