using AyCode.Core.Consts;
using AyCode.Core.Loggers;
using AyCode.Entities.Server.LogItems;
using Microsoft.AspNetCore.SignalR;
namespace AyCode.Services.Server.SignalRs;
///
/// Back-compat: az eredeti egy-generikusos alak a szerver-oldali wire-típussal —
/// a nem-generikus (JSON-os) AcSignaRClientLogItemWriter kliensek párja.
///
public class AcLoggerSignalRHub(TLogger logger) : AcLoggerSignalRHub(logger)
where TLogger : IAcLoggerBase;
///
/// Kliens-log fogadó hub, generikus wire-típussal. A -nek meg kell egyeznie
/// a kliens-oldali AcSignaRClientLogItemWriter<TLogItem> típusparaméterével — a SignalR erre a
/// paraméter-típusra deserializál (AcBinary-nál a generált serializere fut, polymorph-dispatch nélkül).
///
public class AcLoggerSignalRHub(TLogger logger) : Hub
where TLogger : IAcLoggerBase
where TLogItem : class, IAcLogItemClient
{
private TLogger _logger = logger;
// Kapcsolat-életciklus markerek: enélkül a szerver-konzolból nem látszik, hogy a kliens-log csatorna
// egyáltalán felépült-e (a néma loggerHub a "sosem csatlakozott" és a "csatlakozott, de nem küld" esetben ugyanúgy néz ki).
public override async Task OnConnectedAsync()
{
_logger.Info($"Logger client connected; ConnectionId: {Context.ConnectionId}");
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception? exception)
{
_logger.Info($"Logger client disconnected; ConnectionId: {Context.ConnectionId}{(exception == null ? string.Empty : $"; ex: {exception.GetType().Name}: {exception.Message}")}");
await base.OnDisconnectedAsync(exception);
}
public void AddLogItem(TLogItem? logItem)
{
try
{
if (logItem == null)
{
_logger.Error("AddLogItem; LogItem == null");
//_logger.Writer().Detail("");
return;
}
//logItem.LogHeaderId = ???
logItem.TimeStampUtc = DateTime.UtcNow;
_logger.Write(logItem);
//_logger.Writer()?.Write(logItem.AppType, logItem.LogLevel, logItem.Text, logItem.CallerName, logItem.CategoryName, logItem.ErrorType, logItem.Exception);
//_logger.Writer().WriteLogItemAsync(logItem);
}
catch (Exception ex)
{
Console.WriteLine($@"ERROR!!! {nameof(AcLoggerSignalRHub)}->AddLogItem; ex: {ex.Message}{AcEnv.NL}{AcEnv.NL}{ex}");
}
}
}