Пример #1
0
        private void OnRenderBatch(int batchId, byte[] batchData)
        {
            RenderBatchReceived?.Invoke(batchId, batchData);

            var batch = RenderBatchReader.Read(batchData);

            Hive.Update(batch);

            if (ConfirmRenderBatch)
            {
                _ = ConfirmBatch(batchId);
            }

            NextBatchReceived?.Completion?.TrySetResult(null);
        }
Пример #2
0
        private void OnRenderBatch(int id, byte[] data)
        {
            var capturedBatch = new CapturedRenderBatch(id, data);

            Operations?.Batches.Enqueue(capturedBatch);
            RenderBatchReceived?.Invoke(capturedBatch);

            var batch = RenderBatchReader.Read(data);

            Hive.Update(batch);

            if (ConfirmRenderBatch)
            {
                _ = ConfirmBatch(id);
            }

            NextBatchReceived?.Completion?.TrySetResult(null);
        }
Пример #3
0
        private void OnRenderBatch(int browserRendererId, int batchId, byte[] batchData)
        {
            try
            {
                RenderBatchReceived?.Invoke(browserRendererId, batchId, batchData);

                var batch = RenderBatchReader.Read(batchData);

                Hive.Update(batch);

                if (ConfirmRenderBatch)
                {
                    _ = ConfirmBatch(batchId);
                }

                NextBatchReceived?.Completion?.TrySetResult(null);
            }
            catch (Exception e)
            {
                NextBatchReceived?.Completion?.TrySetResult(e);
            }
        }
Пример #4
0
        private void OnRenderBatch(int browserRendererId, int batchId, byte[] batchData)
        {
            try
            {
                RenderBatchReceived?.Invoke(browserRendererId, batchId, batchData);

                var batch = RenderBatchReader.Read(batchData);

                Hive.Update(batch);

                if (ConfirmRenderBatch)
                {
                    HubConnection.InvokeAsync("OnRenderCompleted", batchId, /* error */ null);
                }

                NextBatchReceived?.Completion?.TrySetResult(null);
            }
            catch (Exception e)
            {
                NextBatchReceived?.Completion?.TrySetResult(e);
            }
        }
Пример #5
0
        public async Task <bool> ConnectAsync(Uri uri, bool prerendered)
        {
            var builder = new HubConnectionBuilder();

            builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton <IHubProtocol, IgnitorMessagePackHubProtocol>());
            builder.WithUrl(new Uri(uri, "_blazor/"));
            builder.ConfigureLogging(l => l.AddConsole().SetMinimumLevel(LogLevel.Trace));
            var hive = new ElementHive();

            HubConnection = builder.Build();
            await HubConnection.StartAsync(CancellationToken);

            Console.WriteLine("Connected");

            HubConnection.On <int, string, string>("JS.BeginInvokeJS", OnBeginInvokeJS);
            HubConnection.On <int, int, byte[]>("JS.RenderBatch", OnRenderBatch);
            HubConnection.On <Error>("JS.OnError", OnError);
            HubConnection.Closed += OnClosedAsync;

            // Now everything is registered so we can start the circuit.
            if (prerendered)
            {
                CircuitId = await GetPrerenderedCircuitIdAsync(uri);

                return(await HubConnection.InvokeAsync <bool>("ConnectCircuit", CircuitId));
            }
            else
            {
                CircuitId = await HubConnection.InvokeAsync <string>("StartCircuit", uri, uri);

                return(CircuitId != null);
            }

            void OnBeginInvokeJS(int asyncHandle, string identifier, string argsJson)
            {
                JSInterop?.Invoke(asyncHandle, identifier, argsJson);
            }

            void OnRenderBatch(int browserRendererId, int batchId, byte[] batchData)
            {
                var batch = RenderBatchReader.Read(batchData);

                hive.Update(batch);

                if (ConfirmRenderBatch)
                {
                    HubConnection.InvokeAsync("OnRenderCompleted", batchId, /* error */ null);
                }

                RenderBatchReceived?.Invoke(browserRendererId, batchId, batchData);
            }

            void OnError(Error error)
            {
                Console.WriteLine("ERROR: " + error.Stack);
            }

            Task OnClosedAsync(Exception ex)
            {
                if (ex == null)
                {
                    TaskCompletionSource.TrySetResult(null);
                }
                else
                {
                    TaskCompletionSource.TrySetException(ex);
                }

                return(Task.CompletedTask);
            }
        }