mirror of
https://github.com/thebreaddev/Supercell.GUT.git
synced 2024-11-13 00:54:37 +00:00
8c6a533918
todo: improve code and finish base structures
36 lines
1.1 KiB
C#
36 lines
1.1 KiB
C#
using System.Collections.Immutable;
|
|
using System.Reflection;
|
|
using Supercell.GUT.Server.Protocol.Attributes;
|
|
using Supercell.GUT.Titan.Logic.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;
|
|
}
|
|
}
|