Creado apartir del commit b888de6c92056de294456f581a56e25e734d4ab7 de develop

This commit is contained in:
jrojas
2026-06-26 09:52:35 +02:00
commit 319fd3dfb0
746 changed files with 106610 additions and 0 deletions
+149
View File
@@ -0,0 +1,149 @@
using adas_core.Application.Services.Interfaces;
using adas_core.Application.Subscriptions;
using adas_core.Domain.Models.SignalR;
using Microsoft.AspNetCore.SignalR;
using Newtonsoft.Json;
using Serilog;
using ILogger = Serilog.ILogger;
namespace adas_core.WebSocket.Hubs;
//[Authorize]
public class UciHub(
IClientMessageService clientMessageService,
ISubscribersService subscribersService,
ISubscriberGroupedService subscriberGroupedService)
: Hub
{
private static readonly ILogger Logger = Log.ForContext<UciHub>();
public override async Task OnConnectedAsync()
{
try
{
Logger.Debug("OnConnectedAsync new connection id {ContextConnectionId}", Context.ConnectionId);
var subscriberSameId = subscribersService.GetById(Context.ConnectionId);
if (subscriberSameId != null)
{
Logger.Debug(
"OnConnectedAsync connection id {ContextConnectionId} exists in subscribers list, removing it before inserting new one",
Context.ConnectionId);
subscribersService.RemoveConnectionById(subscriberSameId.Id);
}
subscribersService.AddSubscriber(new WsSubscriber(Context.ConnectionId));
await base.OnConnectedAsync();
}
catch (Exception ex)
{
Logger.Error("error on new connection {exMessage} trace: {exStackTrace}", ex.Message, ex.StackTrace);
await Task.FromException(ex);
}
}
public override async Task OnDisconnectedAsync(Exception? exception)
{
if (exception != null)
Logger.Error(exception,
"Unexpected onDisconnectedAsync received for connection id {ContextConnectionId} with exception {exceptionMessage}",
Context.ConnectionId, exception.Message);
else
Logger.Debug("onDisconnectedAsync received for connection id {ContextConnectionId}", Context.ConnectionId);
Logger.Debug("Removing from subscribers grouped with ConnectionId {ContextConnectionId}", Context.ConnectionId);
var grouped = subscriberGroupedService.GetGrouped();
foreach (var wsl in grouped)
{
if (wsl.WsSubscriber.Any())
{
var removedEs = wsl.WsSubscriber.RemoveAll(ws => ws.Equals(Context.ConnectionId));
if (removedEs > 0)
Logger.Verbose(
"Removed {removedEs} grouped subscribers with connectionId: {ContextConnectionId}", removedEs,
Context.ConnectionId);
}
var removed = subscriberGroupedService.CheckEmptySubscriberGroup(wsl);
if (removed.Any()) Logger.Verbose($"CheckEmptySubscriberGroup: {string.Join(", ", removed)}");
}
var total = subscribersService.RemoveConnectionById(Context.ConnectionId);
Logger.Debug("Removing {total} from subscribers with ConnectionId {ContextConnectionId}", total,
Context.ConnectionId);
Logger.Debug("Removed id: {ContextConnectionId}", Context.ConnectionId);
await base.OnDisconnectedAsync(exception);
}
[HubMethodName("subscribe")]
public async Task OnSubscribe(string subMessage)
{
try
{
var msg = JsonConvert.DeserializeObject<Message>(subMessage);
if (msg == null)
{
Logger.Warning("Error deserializing subscription message {subMessage}", subMessage);
return;
}
var subs = subscribersService.GetById(Context.ConnectionId);
if (subs == null)
{
Logger.Warning("Subscription received from unknown connection id {ContextConnectionId}",
Context.ConnectionId);
return;
}
subs.Section = msg.Data?.Section;
subs.Version = msg.Version ?? "Not a squirrel app";
subs.GroupedFields = msg.Data?.GroupedFields;
await clientMessageService.ProcessMessage(msg, Context.ConnectionId);
}
catch (Exception ex)
{
Logger.Error("Error on subscribe {exMessage}", ex);
}
}
[HubMethodName("unsubscribe")]
public void UnSubscribe()
{
try
{
subscribersService.RemoveConnectionById(Context.ConnectionId);
}
catch (Exception ex)
{
Logger.Error("error on unsubscribe {exMessage}", ex.Message);
}
}
//TODO revisar esto, si va a acabar llamando al mismo sitio y procesando el mensaje igual que OnSuscribe, realmente sobra.
[HubMethodName("chatMessage")]
public async Task OnChatMessage(string message)
{
try
{
var msg = JsonConvert.DeserializeObject<Message>(message);
if (msg == null)
{
Logger.Error("Error deserializing Chat message: {message}", message);
return;
}
await clientMessageService.ProcessMessage(msg, Context.ConnectionId);
}
catch (Exception ex)
{
Logger.Error("error on subscribe {exMessage} trace: {exStackTrace}", ex.Message, ex.StackTrace);
}
}
}
File diff suppressed because it is too large Load Diff