Пример #1
0
        public static PullFromJSDataStream CreateJSDataStream(
            IJSRuntime runtime,
            IJSStreamReference jsStreamReference,
            long totalLength,
            CancellationToken cancellationToken = default)
        {
            var jsDataStream = new PullFromJSDataStream(runtime, jsStreamReference, totalLength, cancellationToken);

            return(jsDataStream);
        }
Пример #2
0
 private PullFromJSDataStream(
     IJSRuntime runtime,
     IJSStreamReference jsStreamReference,
     long totalLength,
     CancellationToken cancellationToken)
 {
     _runtime                 = runtime;
     _jsStreamReference       = jsStreamReference;
     _totalLength             = totalLength;
     _streamCancellationToken = cancellationToken;
     _offset = 0;
 }
Пример #3
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);
        }
Пример #4
0
        public static async Task <string> JSToDotNetStreamParameterAsync(IJSStreamReference jsStreamReference)
        {
            using var dataReferenceStream = await jsStreamReference.OpenReadStreamAsync();

            return(await ValidateStreamValuesAsync(dataReferenceStream));
        }