69 lines
2.7 KiB
C#
69 lines
2.7 KiB
C#
using AyCode.Core.Consts;
|
|
using AyCode.Core.Loggers;
|
|
using AyCode.Entities.Server.LogItems;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
namespace AyCode.Services.Server.SignalRs;
|
|
|
|
|
|
/// <summary>
|
|
/// Back-compat: az eredeti egy-generikusos alak a szerver-oldali <see cref="AcLogItem"/> wire-típussal —
|
|
/// a nem-generikus (JSON-os) <c>AcSignaRClientLogItemWriter</c> kliensek párja.
|
|
/// </summary>
|
|
public class AcLoggerSignalRHub<TLogger>(TLogger logger) : AcLoggerSignalRHub<TLogger, AcLogItem>(logger)
|
|
where TLogger : IAcLoggerBase;
|
|
|
|
|
|
/// <summary>
|
|
/// Kliens-log fogadó hub, generikus wire-típussal. A <typeparamref name="TLogItem"/>-nek meg kell egyeznie
|
|
/// a kliens-oldali <c>AcSignaRClientLogItemWriter<TLogItem></c> 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).
|
|
/// </summary>
|
|
public class AcLoggerSignalRHub<TLogger, TLogItem>(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<ConsoleLogWriter>().Detail("");
|
|
|
|
return;
|
|
}
|
|
|
|
//logItem.LogHeaderId = ???
|
|
logItem.TimeStampUtc = DateTime.UtcNow;
|
|
|
|
_logger.Write(logItem);
|
|
|
|
//_logger.Writer<IAcConsoleLogWriter>()?.Write(logItem.AppType, logItem.LogLevel, logItem.Text, logItem.CallerName, logItem.CategoryName, logItem.ErrorType, logItem.Exception);
|
|
//_logger.Writer<DbLogItemWriter>().WriteLogItemAsync(logItem);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($@"ERROR!!! {nameof(AcLoggerSignalRHub<TLogger, TLogItem>)}->AddLogItem; ex: {ex.Message}{AcEnv.NL}{AcEnv.NL}{ex}");
|
|
}
|
|
}
|
|
}
|
|
|