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;
}
}
}