33 lines
969 B
C#
33 lines
969 B
C#
// 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<in T, in S> : IPacketHandler<S> where T : IIncomingPacket
|
|
{
|
|
[UsedImplicitly]
|
|
public Task HandleAsync(T packet, S session);
|
|
|
|
async Task<bool> IPacketHandler<S>.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<in S>
|
|
{
|
|
Task<bool> TryHandleAsync(IIncomingPacket packet, S session);
|
|
}
|