public static PullFromJSDataStream CreateJSDataStream( IJSRuntime runtime, IJSStreamReference jsStreamReference, long totalLength, CancellationToken cancellationToken = default) { var jsDataStream = new PullFromJSDataStream(runtime, jsStreamReference, totalLength, cancellationToken); return(jsDataStream); }
private PullFromJSDataStream( IJSRuntime runtime, IJSStreamReference jsStreamReference, long totalLength, CancellationToken cancellationToken) { _runtime = runtime; _jsStreamReference = jsStreamReference; _totalLength = totalLength; _streamCancellationToken = cancellationToken; _offset = 0; }
public static async ValueTask <RemoteJSDataStream> CreateRemoteJSDataStreamAsync( RemoteJSRuntime runtime, IJSStreamReference jsStreamReference, long totalLength, long signalRMaximumIncomingBytes, TimeSpan jsInteropDefaultCallTimeout, CancellationToken cancellationToken = default) { // Enforce minimum 1 kb, maximum 50 kb, SignalR message size. // We budget 512 bytes overhead for the transfer, thus leaving at least 512 bytes for data // transfer per chunk with a 1 kb message size. // Additionally, to maintain interactivity, we put an upper limit of 50 kb on the message size. var chunkSize = signalRMaximumIncomingBytes > 1024 ? Math.Min(signalRMaximumIncomingBytes, 50 * 1024) - 512 : throw new ArgumentException($"SignalR MaximumIncomingBytes must be at least 1 kb."); var streamId = runtime.RemoteJSDataStreamNextInstanceId++; var remoteJSDataStream = new RemoteJSDataStream(runtime, streamId, totalLength, jsInteropDefaultCallTimeout, cancellationToken); await runtime.InvokeVoidAsync("Blazor._internal.sendJSDataStream", jsStreamReference, streamId, chunkSize); return(remoteJSDataStream); }
public static async Task <string> JSToDotNetStreamParameterAsync(IJSStreamReference jsStreamReference) { using var dataReferenceStream = await jsStreamReference.OpenReadStreamAsync(); return(await ValidateStreamValuesAsync(dataReferenceStream)); }