Terraria.NetMessage.CompressTileBlock C# (CSharp) Method

CompressTileBlock() public static method

public static CompressTileBlock ( int xStart, int yStart, short width, short height, byte buffer, int bufferStart ) : int
xStart int
yStart int
width short
height short
buffer byte
bufferStart int
return int
        public static int CompressTileBlock(int xStart, int yStart, short width, short height, byte[] buffer, int bufferStart)
        {
            using (MemoryStream memoryStream1 = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter((Stream)memoryStream1))
                {
                    writer.Write(xStart);
                    writer.Write(yStart);
                    writer.Write(width);
                    writer.Write(height);
                    NetMessage.CompressTileBlock_Inner(writer, xStart, yStart, (int)width, (int)height);
                    int length = buffer.Length;
                    if ((long)bufferStart + memoryStream1.Length > (long)length)
                        return (int)((long)(length - bufferStart) + memoryStream1.Length);
                    memoryStream1.Position = 0L;
                    MemoryStream memoryStream2 = new MemoryStream();
                    using (DeflateStream deflateStream = new DeflateStream((Stream)memoryStream2, CompressionMode.Compress, true))
                    {
                        memoryStream1.CopyTo((Stream)deflateStream);
                        deflateStream.Flush();
                        deflateStream.Close();
                        deflateStream.Dispose();
                    }
                    if (memoryStream1.Length <= memoryStream2.Length)
                    {
                        memoryStream1.Position = 0L;
                        buffer[bufferStart] = (byte)0;
                        ++bufferStart;
                        memoryStream1.Read(buffer, bufferStart, (int)memoryStream1.Length);
                        return (int)memoryStream1.Length + 1;
                    }
                    memoryStream2.Position = 0L;
                    buffer[bufferStart] = (byte)1;
                    ++bufferStart;
                    memoryStream2.Read(buffer, bufferStart, (int)memoryStream2.Length);
                    return (int)memoryStream2.Length + 1;
                }
            }
        }