mirror of
https://github.com/thebreaddev/Supercell.GUT.git
synced 2024-11-10 07:44:37 +00:00
ad23f95319
only basic messages, wip.
36 lines
1 KiB
C#
36 lines
1 KiB
C#
using System.Collections.Immutable;
|
|
using System.Reflection;
|
|
using Supercell.GUT.Server.Protocol.Attributes;
|
|
using Supercell.GUT.Titan.Message;
|
|
|
|
namespace Supercell.GUT.Server.Protocol.Handlers;
|
|
internal abstract class MessageHandlerBase
|
|
{
|
|
private readonly ImmutableDictionary<int, MethodInfo> _handlerMethods;
|
|
|
|
public MessageHandlerBase()
|
|
{
|
|
var builder = ImmutableDictionary.CreateBuilder<int, MethodInfo>();
|
|
|
|
foreach (var method in GetType().GetMethods())
|
|
{
|
|
MessageHandlerAttribute? attribute = method.GetCustomAttribute<MessageHandlerAttribute>();
|
|
if (attribute == null) continue;
|
|
|
|
builder.Add(attribute.MessageType, method);
|
|
}
|
|
|
|
_handlerMethods = builder.ToImmutable();
|
|
}
|
|
|
|
public async Task<bool> HandleMessage(PiranhaMessage message)
|
|
{
|
|
if (_handlerMethods.TryGetValue(message.GetMessageType(), out var method))
|
|
{
|
|
await (Task)method.Invoke(this, new object[] { message })!;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|