public override SteamPacket GetReply()
        {
            int         bytesRead;
            SteamPacket packet;

            bytesRead = this.ReceivePacket(SteamPacket.PACKET_SIZE);

            if (this.PacketIsSplit())
            {
                byte[]        splitData;
                int           packetCount, packetNumber;
                int           requestId;
                byte          packetNumberAndCount;
                List <byte[]> splitPackets = new List <byte[]>();

                do
                {
                    requestId            = this.bufferReader.ReadInt32().ReverseBytes();
                    packetNumberAndCount = this.bufferReader.ReadByte();
                    packetCount          = packetNumberAndCount & 0xF;
                    packetNumber         = (packetNumberAndCount & 0xF0) >> 4;

                    // read preamble only in the first packet, otherwise we cut off stuff
                    if (packetNumber == 0)
                    {
                        this.bufferReader.ReadInt32();
                    }

                    splitData = this.bufferReader.ReadBytes((int)(this.bufferReader.BaseStream.Length - this.bufferReader.BaseStream.Position));

                    splitPackets.Add(splitData);
                    if (splitPackets.Count < packetCount)
                    {
                        try {
                            bytesRead = this.ReceivePacket();
                        }
                        catch {
                            bytesRead = 0;
                        }
                    }
                    else
                    {
                        bytesRead = 0;
                    }
                    // TODO: use packetNumber nad packetCount
                } while (bytesRead > 0 && this.PacketIsSplit());


                packet = SteamPacket.ReassemblePacket(splitPackets);
            }
            else
            {
                packet = this.CreatePacket();
            }

            return(packet);
        }
        public override SteamPacket GetReply()
        {
            int         bytesRead;
            SteamPacket packet;

            bytesRead = ReceivePacket(SteamPacket.PACKET_SIZE);

            if (PacketIsSplit())
            {
                bool          isCompressed = false;
                byte[]        splitData;
                int           packetCount, packetNumber, requestId;
                int           packetsReceived = 1;
                int           packetChecksum  = 0;
                int           packetSplit     = 0;
                short         splitSize;
                short         uncompressedSize = 0;
                List <byte[]> splitPackets     = new List <byte[]>();

                do
                {
                    // Parsing of split packet headers
                    requestId = ReverseBytes(this.bufferReader.ReadInt32());

                    isCompressed = this.PacketIsCompressed(requestId);

                    packetCount  = (int)this.bufferReader.ReadByte();
                    packetNumber = (int)this.bufferReader.ReadByte() + 1;
                    splitSize    = (this.bufferReader.ReadInt16());
                    splitSize   -= 4;                   // FIXME: do we get incorrect split sizes????

                    if (packetsReceived == 1)
                    {
                        for (int i = 0; i < packetCount; i++)
                        {
                            splitPackets.Add(new byte[] { });
                        }
                    }

                    if (isCompressed)
                    {
                        uncompressedSize = ReverseBytes(this.bufferReader.ReadInt16());                         // int32 ??
                        packetChecksum   = ReverseBytes(this.bufferReader.ReadInt32());
                    }

                    // Omit additional header on the first packet
                    if (packetNumber == 1)
                    {
                        this.bufferReader.ReadInt32();
                    }

                    // Caching of split packet Data
                    splitData = new byte[splitSize];
                    this.bufferReader.Read(splitData, 0, splitSize);
                    //splitPackets.Capacity = packetCount;
                    //splitPackets.Add(splitData);
                    splitPackets[packetNumber - 1] = splitData;

                    // Receiving the next packet
                    if (packetsReceived < packetCount)
                    {
                        bytesRead = this.ReceivePacket();

                        packetSplit = this.bufferReader.ReadInt32();

                        packetsReceived++;
                    }
                    else
                    {
                        bytesRead = 0;
                    }
                } while (packetsReceived <= packetCount && bytesRead > 0 && packetSplit == SteamPacket.PACKET_SPLIT_MARKER);

                if (isCompressed)
                {
                    packet = SteamPacket.ReassemblePacket(splitPackets, true, uncompressedSize, packetChecksum);
                }
                else
                {
                    packet = SteamPacket.ReassemblePacket(splitPackets);
                }
            }
            else
            {
                packet = this.CreatePacket();
            }

            return(packet);
        }