/* * TODO: Compression issue here? */ /// <summary> /// Flush all data to the TCPClient NetworkStream. /// </summary> public void FlushData(bool queue = false) { try { var allData = _bffr.ToArray(); _bffr.Clear(); if (Server.ServerSettings.UseCompression && _client.PacketMode == PacketMode.Play && _client.SetCompressionSend) { var isOver = (allData.Length >= Server.ServerSettings.CompressionThreshold); var dataLength = isOver ? allData.Length : 0; //Calculate length of 'Data Length' var dLength = GetVarIntBytes(dataLength); //Create all data var compressedBytes = ZlibStream.CompressBuffer(allData); var packetLength = compressedBytes.Length + dLength.Length; var dataToSend = isOver ? compressedBytes : allData; var compressed = new DataBuffer(_client); compressed.WriteVarInt(packetLength); compressed.WriteVarInt(dataLength); compressed.Write(dataToSend); System.Console.WriteLine(); System.Console.WriteLine("Packet bigger than Threshold: " + isOver); System.Console.WriteLine("Packet info: "); System.Console.WriteLine("(Header) Packet Length: " + packetLength); System.Console.WriteLine("(Header) Data Length: " + dataLength); System.Console.WriteLine("Data Length " + dataToSend.Length); System.Console.WriteLine("Length difference: " + (packetLength - dataToSend.Length)); System.Console.WriteLine(); _client.AddToQueue(compressed.ExportWriter, queue); } else { WriteVarInt(allData.Length); var buffer = _bffr.ToArray(); var data = new List <byte>(); foreach (var i in buffer) { data.Add(i); } foreach (var i in allData) { data.Add(i); } _client.AddToQueue(data.ToArray(), queue); } _bffr.Clear(); } catch (Exception ex) { Globals.ClientManager.PacketError(_client, ex); } }