34 lines
969 B
C#
34 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);
|
||
|
}
|