using Insight.Domain.Interfaces; using Insight.Domain.Network; using Microsoft.Extensions.Logging; using Vaitr.Network; namespace Insight.Agent.Network; public class AgentSession : TcpSession { private readonly IEnumerable> _handlers; public AgentSession(IEnumerable> handlers, ISerializer serializer, ILogger logger) : base(serializer, logger) { _handlers = handlers; } protected override ValueTask OnConnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Agent ({ep?}) connected", RemoteEndPoint); return default; } protected override ValueTask OnDisconnectedAsync(CancellationToken cancellationToken) { _logger.LogInformation("Agent ({ep?}) disconnected", RemoteEndPoint); return default; } protected override ValueTask OnSentAsync(IPacketContext context, CancellationToken cancellationToken) { return base.OnSentAsync(context, cancellationToken); } protected override async ValueTask OnReceivedAsync(IPacketContext context, CancellationToken cancellationToken) { await base.OnReceivedAsync(context, cancellationToken); foreach (var handler in _handlers) { try { await handler.HandleAsync(this, context.Packet, cancellationToken); } catch (Exception ex) { _logger.LogWarning("Agent ({ep?}) {ex}", RemoteEndPoint, ex.ToString()); } } } protected override ValueTask OnHeartbeatAsync(CancellationToken cancellationToken) { _logger.LogInformation("Agent ({ep?}) Heartbeat", RemoteEndPoint); return default; } }