Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Transformice.Game;
- using Transformice.Utils;
- using System;
- using System.Text;
- using DotNetty.Buffers;
- using DotNetty.Transport.Channels;
- /**
- * Transformice sucks.
- *
- * @author Macaco <shcnedi@gmail.com>
- */
- namespace Transformice.Network
- {
- class NetworkHandler : ChannelHandlerAdapter
- {
- private Client _client;
- private byte[] _lastPacket;
- public override void ChannelRead(IChannelHandlerContext context, object message)
- {
- IByteBuffer buffer = message as IByteBuffer;
- if (buffer.ReadableBytes < 2) return;
- byte[] buff = new byte[buffer.ReadableBytes];
- buffer.ReadBytes(buff);
- string content = Encoding.ASCII.GetString(buff);
- if (content.StartsWith("<policy-file-request/>"))
- {
- byte[] policy = Encoding.Default.GetBytes("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>");
- context.WriteAndFlushAsync(Unpooled.CopiedBuffer(policy));
- }
- if (_lastPacket != null) _lastPacket = null;
- var packet = new DataInputStream(new ByteArrayInputStream(buff));
- ParsePacket(packet, buff);
- }
- public void ParsePacket(DataInputStream packet, byte[] buff)
- {
- sbyte sizeBytes = packet.ReadByte();
- int length = sizeBytes == 1 ? packet.ReadUnsignedByte() : sizeBytes == 2 ? packet.ReadUnsignedShort() : sizeBytes == 3 ? ((packet.ReadUnsignedByte() & 0xFF) << 16) | ((packet.ReadUnsignedByte() & 0xFF) << 8) | (packet.ReadUnsignedByte() & 0xFF) : 0;
- if (length == 0) return;
- sbyte packetId = packet.ReadByte();
- if (packet.Available() == length)
- {
- if (packet.Available() == length)
- {
- byte[] strBuff = new byte[packet.Available()];
- packet.ReadFully(strBuff);
- }
- }
- else if (packet.Available() < length)
- {
- _lastPacket = buff;
- }
- else if (packet.Available() < length)
- {
- byte[] realPacket = new byte[length];
- packet.Read(realPacket, 0, length);
- if (length >= 2) _client.ParsePacket(new DataInputStream(new ByteArrayInputStream(realPacket)), realPacket, packetId);
- if (packet.Available() >= 2)
- {
- byte[] rest = new byte[packet.Available()];
- packet.ReadFully(rest);
- ParsePacket(new DataInputStream(new ByteArrayInputStream(rest)), rest);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement