Ejemplo n.º 1
0
        public override void Invoke(McConnectionContext ctx)
        {
            var key = (ctx.PacketId, ctx.ConnectionState, ctx.BoundTo);

            if (rules.ContainsKey(key))
            {
                rules[key].Invoke(ctx);
            }
            _next?.Invoke(ctx);
        }
Ejemplo n.º 2
0
        public override void Invoke(McConnectionContext ctx)
        {
            if (ctx.IsCompressed)
            {
                var array = ctx.Data;
                McVarint.TryParse(ref array, out int compressedLength);
                ctx.CompressionLength = compressedLength;

                if (ctx.CompressionLength > 0)
                {
                    array = Ionic.Zlib.ZlibStream.UncompressBuffer(array);
                }
                ctx.Data = array;
            }
            _next?.Invoke(ctx);
        }
Ejemplo n.º 3
0
        public override void Invoke(McConnectionContext ctx)
        {
            var array = ctx.Data;

            McVarint.TryParse(ref array, out int packetId);
            ctx.PacketId = packetId;
            ctx.Data     = array;

            var key = new PacketKey(ctx.PacketId, ctx.ConnectionState, ctx.BoundTo);


            if (packets.ContainsKey(key))
            {
                var packet = (BasePacket)Activator.CreateInstance(packets[key]);
                try
                {
                    packet.Read(ctx.Data);
                }
                catch
                {
                    Console.WriteLine($"Error 0x{packetId:X02} " +
                                      $"on {ctx.ConnectionState} " +
                                      $"to {ctx.BoundTo} " +
                                      $"with {Convert.ToBase64String(ctx.Data)}");
                }

                ctx.packetEventHub.Invoke(key, packet);
                ctx.genericEventHub.Invoke(packets[key], packet);
                Program.Log($"0x{ctx.PacketId:X02} | {ctx.ConnectionState} | {ctx.BoundTo} | {packet}");
            }
            else
            {
                string packetMessage = ctx.Data.ToHexString();
                if (packetMessage.Length > MAX_LENGTH)
                {
                    packetMessage = $"{packetMessage.Remove(MAX_LENGTH)}...";
                }
                Program.Log($"1x{ctx.PacketId:X02} | {ctx.ConnectionState} | {ctx.BoundTo} | {packetMessage}");
            }
            _next?.Invoke(ctx);
        }
Ejemplo n.º 4
0
        public override void Invoke(McConnectionContext ctx)
        {
            queue.AddRange(ctx.Data);
            while (queue.Count > 0)
            {
                ctx.Data = queue.ToArray();

                bool parsed = McVarint.TryParse(ctx.Data, out lengthLength, out length);

                if (!parsed)
                {
                    Debug.WriteLine("Packet is too small, read next packet");
                    break;
                }

                if (length + lengthLength > queue.Count)
                {
                    break;
                }

                ctx.Data = ctx.Data[lengthLength..(length + lengthLength)];
Ejemplo n.º 5
0
 public abstract void Invoke(McConnectionContext mcConnectionContext);