public async Task DispatchEvent(string eventDescriptorJson, string eventArgs) { RendererRegistryEventDispatcher.BrowserEventDescriptor eventDescriptor = null; try { AssertInitialized(); eventDescriptor = ParseEventDescriptor(eventDescriptorJson); if (eventDescriptor == null) { return; } await Renderer.Dispatcher.InvokeAsync(() => { SetCurrentCircuitHost(this); return(RendererRegistryEventDispatcher.DispatchEvent(eventDescriptor, eventArgs)); }); } catch (Exception ex) { Log.DispatchEventFailedToDispatchEvent(_logger, eventDescriptor != null ? eventDescriptor.EventHandlerId.ToString() : null, ex); UnhandledException?.Invoke(this, new UnhandledExceptionEventArgs(ex, isTerminating: false)); } }
public async Task ClickAsync(HubConnection connection) { if (!Events.TryGetValue("click", out var clickEventDescriptor)) { throw new InvalidOperationException("Element does not have a click event."); } var mouseEventArgs = new UIMouseEventArgs() { Type = clickEventDescriptor.EventName, Detail = 1 }; var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = clickEventDescriptor.EventId, EventArgsType = "mouse", }; var serializedJson = JsonSerializer.Serialize(mouseEventArgs, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); var argsObject = new object[] { browserDescriptor, serializedJson }; var callId = "0"; var assemblyName = "Microsoft.AspNetCore.Components.Web"; var methodIdentifier = "DispatchEvent"; var dotNetObjectId = 0; var clickArgs = JsonSerializer.Serialize(argsObject, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); await connection.InvokeAsync("BeginInvokeDotNetFromJS", callId, assemblyName, methodIdentifier, dotNetObjectId, clickArgs); }
public async Task DispatchingEventsWithInvalidUIEventArgs() { // Arrange var(interopCalls, dotNetCompletions, batches) = ConfigureClient(); await GoToTestComponent(batches); var sink = _serverFixture.Host.Services.GetRequiredService <TestSink>(); var logEvents = new List <(LogLevel logLevel, string)>(); sink.MessageLogged += (wc) => logEvents.Add((wc.LogLevel, wc.EventId.Name)); // Act var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = 6, EventArgsType = "mouse", }; await Client.HubConnection.InvokeAsync( "DispatchBrowserEvent", JsonSerializer.Serialize(browserDescriptor, TestJsonSerializerOptionsProvider.Options), "{Invalid:{\"payload}"); Assert.Contains( (LogLevel.Debug, "DispatchEventFailedToDispatchEvent"), logEvents); await ValidateClientKeepsWorking(Client, batches); }
internal Task SelectAsync(HubConnection connection, string value) { if (!Events.TryGetValue("change", out var changeEventDescriptor)) { throw new InvalidOperationException("Element does not have a change event."); } var sleectEventArgs = new UIChangeEventArgs() { Type = changeEventDescriptor.EventName, Value = value }; var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = changeEventDescriptor.EventId, EventArgsType = "change", EventFieldInfo = new EventFieldInfo { ComponentId = 0, FieldValue = value } }; return(DispatchEventCore(connection, Serialize(browserDescriptor), Serialize(sleectEventArgs))); }
public async Task DispatchingEventThroughJSInterop() { // Arrange var(interopCalls, dotNetCompletions, batches) = ConfigureClient(); await GoToTestComponent(batches); var sink = _serverFixture.Host.Services.GetRequiredService <TestSink>(); var logEvents = new List <(LogLevel logLevel, string eventIdName)>(); sink.MessageLogged += (wc) => logEvents.Add((wc.LogLevel, wc.EventId.Name)); // Act var mouseEventArgs = new UIMouseEventArgs() { Type = "click", Detail = 1 }; var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = 1, EventArgsType = "mouse", }; var serializerOptions = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var uiArgs = JsonSerializer.Serialize(mouseEventArgs, serializerOptions); await Assert.ThrowsAsync <TaskCanceledException>(() => Client.InvokeDotNetMethod( 0, "Microsoft.AspNetCore.Components.Web", "DispatchEvent", null, JsonSerializer.Serialize(new object[] { browserDescriptor, uiArgs }, serializerOptions))); Assert.Contains( (LogLevel.Debug, "DispatchEventThroughJSInterop"), logEvents); await ValidateClientKeepsWorking(Client, batches); }
public async Task DispatchingEventsWithInvalidEventHandlerId() { // Arrange var(interopCalls, dotNetCompletions, batches) = ConfigureClient(); await GoToTestComponent(batches); var sink = _serverFixture.Host.Services.GetRequiredService <TestSink>(); var logEvents = new List <(LogLevel logLevel, string eventIdName, Exception exception)>(); sink.MessageLogged += (wc) => logEvents.Add((wc.LogLevel, wc.EventId.Name, wc.Exception)); // Act var mouseEventArgs = new UIMouseEventArgs() { Type = "click", Detail = 1 }; var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = 1, EventArgsType = "mouse", }; await Client.HubConnection.InvokeAsync( "DispatchBrowserEvent", JsonSerializer.Serialize(browserDescriptor, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }), JsonSerializer.Serialize(mouseEventArgs, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase })); Assert.Contains( logEvents, e => e.eventIdName == "DispatchEventFailedToDispatchEvent" && e.logLevel == LogLevel.Debug && e.exception is ArgumentException ae && ae.Message.Contains("There is no event handler with ID -1")); await ValidateClientKeepsWorking(Client, batches); }
public Task ClickAsync(HubConnection connection) { if (!Events.TryGetValue("click", out var clickEventDescriptor)) { throw new InvalidOperationException("Element does not have a click event."); } var mouseEventArgs = new UIMouseEventArgs() { Type = clickEventDescriptor.EventName, Detail = 1 }; var browserDescriptor = new RendererRegistryEventDispatcher.BrowserEventDescriptor() { BrowserRendererId = 0, EventHandlerId = clickEventDescriptor.EventId, EventArgsType = "mouse", }; return(DispatchEventCore(connection, Serialize(browserDescriptor), Serialize(mouseEventArgs))); }