// Copyright (c) 2023 Timothy Schenk. Subject to the GNU AGPL Version 3 License. using System.Diagnostics; using JetBrains.Annotations; namespace Rai.PacketMediator; [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors)] public interface IPacketHandler : IPacketHandler where T : IIncomingPacket { [UsedImplicitly] public Task HandleAsync(T packet, S session); async Task IPacketHandler.TryHandleAsync(IIncomingPacket packet, S session) { if (packet is not T tPacket) { return false; } using var activity = new ActivitySource(nameof(PacketMediator)).StartActivity(nameof(HandleAsync)); activity?.AddTag("Handler", this.ToString()); activity?.AddTag("Packet", packet.ToString()); await HandleAsync(tPacket, session); return true; } } public interface IPacketHandler { Task TryHandleAsync(IIncomingPacket packet, S session); }