[backend/signalr] Catch exceptions in event handlers to prevent exceptions from causing backend crashes

This commit is contained in:
Laura Hausmann 2024-11-20 00:45:49 +01:00
parent 004af22b68
commit c91a1fa8bc
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -418,20 +418,41 @@ public sealed class StreamingConnectionAggregate : IDisposable
private async void OnFilterAdded(object? _, Filter filter) private async void OnFilterAdded(object? _, Filter filter)
{ {
if (filter.User.Id != _userId) return; try
await _hub.Clients.User(_userId).FilterAddedAsync(FilterRenderer.RenderOne(filter)); {
if (filter.User.Id != _userId) return;
await _hub.Clients.User(_userId).FilterAddedAsync(FilterRenderer.RenderOne(filter));
}
catch (Exception e)
{
_logger.LogError("Event handler {handler} threw exception: {e}", nameof(OnFilterAdded), e);
}
} }
private async void OnFilterUpdated(object? _, Filter filter) private async void OnFilterUpdated(object? _, Filter filter)
{ {
if (filter.User.Id != _userId) return; try
await _hub.Clients.User(_userId).FilterUpdatedAsync(FilterRenderer.RenderOne(filter)); {
if (filter.User.Id != _userId) return;
await _hub.Clients.User(_userId).FilterUpdatedAsync(FilterRenderer.RenderOne(filter));
}
catch (Exception e)
{
_logger.LogError("Event handler {handler} threw exception: {e}", nameof(OnFilterUpdated), e);
}
} }
private async void OnFilterRemoved(object? _, Filter filter) private async void OnFilterRemoved(object? _, Filter filter)
{ {
if (filter.User.Id != _userId) return; try
await _hub.Clients.User(_userId).FilterRemovedAsync(filter.Id); {
if (filter.User.Id != _userId) return;
await _hub.Clients.User(_userId).FilterRemovedAsync(filter.Id);
}
catch (Exception e)
{
_logger.LogError("Event handler {handler} threw exception: {e}", nameof(OnFilterRemoved), e);
}
} }
#endregion #endregion