server-master/srcs/_plugins/WingsEmu.Plugins.PacketHandling/GenericPacketHandlerContainer.cs
2026-02-10 18:21:30 +01:00

47 lines
No EOL
1.5 KiB
C#

// WingsEmu
//
// Developed by NosWings Team
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using PhoenixLib.Logging;
using WingsEmu.Game._packetHandling;
using WingsEmu.Game.Networking;
using WingsEmu.Packets;
namespace WingsEmu.Plugins.PacketHandling;
public class GenericPacketHandlerContainer<T> : IPacketHandlerContainer<T> where T : IPacketHandler
{
private readonly Dictionary<Type, T> _handlers = new();
public void Register(Type packetType, T handler)
{
_handlers.Add(packetType, handler);
}
public void Unregister(Type packetType)
{
_handlers.Remove(packetType);
}
public void Execute(IClientSession session, IClientPacket packet, Type packetType)
{
ExecuteAsync(session, packet, packetType).ConfigureAwait(false).GetAwaiter().GetResult();
}
public async Task ExecuteAsync(IClientSession session, IClientPacket packet, Type packetType)
{
if (!_handlers.TryGetValue(packetType, out T handler))
{
Log.Info($"[PACKET_HANDLER] {packetType.Name} NO_HANDLER");
return;
}
Log.Info(session.HasSelectedCharacter == false
? $"[PACKET_HANDLER] [Id: {session.Account?.Id} - {(session.Account == null ? "None" : "account: " + session.Account?.Name)}] Handling {packet.OriginalHeader}"
: $"[PACKET_HANDLER] [Id: {session.Account?.Id} - {session.PlayerEntity?.Name}] Handling {packet.OriginalHeader}");
await handler.HandleAsync(session, packet);
}
}