예제 #1
0
    public void RegisterPacketHandler <TPacket>(PacketId packetId, IPacketQueueHandler <TPacket> handler) where TPacket : Packet, new()
    {
        if (!this.registeredPacketHandlerActions.ContainsKey(packetId))
        {
            this.registeredPacketHandlerActions[packetId] = new();
        }

        var pool = new PacketPool <TPacket>();

        this.registeredPacketHandlerActions[packetId].Add((client, data) =>
        {
            var packet = pool.GetPacket();
            packet.Read(data);
            handler.EnqueuePacket(client, packet);
        });
        handler.PacketHandled += (packet) => pool.ReturnPacket(packet);
    }
예제 #2
0
 public void RegisterPacketHandler <T>(PacketId packetId, IPacketQueueHandler <T> queueHandler) where T : Packet, new()
 => this.packetReducer.RegisterPacketHandler(packetId, queueHandler);