working tcp (kinda), send still brokey

This commit is contained in:
rfi
2023-10-10 16:56:08 +07:00
parent 0eacd1bfe2
commit 8c53541d7f
7 changed files with 2279 additions and 10 deletions

View File

@@ -1,4 +1,6 @@
using MessagePack;
using System.Reflection;
using AscNet.Common.Util;
using MessagePack;
namespace AscNet.GameServer
{
@@ -73,4 +75,49 @@ namespace AscNet.GameServer
}
}
#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
[AttributeUsage(AttributeTargets.Method)]
public class PacketHandler : Attribute
{
public string Name { get; }
public PacketHandler(string name)
{
Name = name;
}
}
public delegate void PacketHandlerDelegate(Session session, byte[] packet);
public static class PacketFactory
{
public static readonly Dictionary<string, PacketHandlerDelegate> Handlers = new();
static readonly Logger c = new("Factory", ConsoleColor.Yellow);
public static void LoadPacketHandlers()
{
c.Log("Loading Packet Handlers...");
IEnumerable<Type> classes = from t in Assembly.GetExecutingAssembly().GetTypes()
select t;
foreach (var method in classes.SelectMany(t => t.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)))
{
var attr = method.GetCustomAttribute<PacketHandler>(false);
if (attr == null || Handlers.ContainsKey(attr.Name)) continue;
Handlers.Add(attr.Name, (PacketHandlerDelegate)Delegate.CreateDelegate(typeof(PacketHandlerDelegate), method));
#if DEBUG
c.Log($"Loaded {method.Name}");
#endif
}
c.Log("Finished Loading Packet Handlers");
}
public static PacketHandlerDelegate? GetPacketHandler(string name)
{
Handlers.TryGetValue(name, out PacketHandlerDelegate? handler);
return handler;
}
}
}