/// <summary> /// Flush all data to the TCPClient NetworkStream. /// </summary> public void FlushData(bool quee = false) { try { var allData = _bffr.ToArray(); _bffr.Clear(); if (ServerSettings.UseCompression && _client.PacketMode == PacketMode.Play && _client.SetCompressionSend) { bool isOver = (allData.Length >= ServerSettings.CompressionThreshold); int dataLength = isOver ? allData.Length : 0; //Calculate length of 'Data Length' byte[] dLength = GetVarIntBytes(dataLength); //Create all data var compressedBytes = ZlibStream.CompressBuffer(allData); int packetlength = compressedBytes.Length + dLength.Length; var dataToSend = isOver ? compressedBytes : allData; var compressed = new DataBuffer(_client); compressed.WriteVarInt(packetlength); compressed.WriteVarInt(dataLength); compressed.Write(dataToSend); Console.WriteLine(); Console.WriteLine("Packet bigger than Threshold: " + isOver); Console.WriteLine("Packet info: "); Console.WriteLine("(Header) Packet Length: " + packetlength); Console.WriteLine("(Header) Data Length: " + dataLength); Console.WriteLine("Data Length " + dataToSend.Length); Console.WriteLine("Length difference: " + (packetlength - dataToSend.Length)); Console.WriteLine(); _client.AddToQuee(compressed.ExportWriter, quee); } 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.AddToQuee(data.ToArray(), quee); } _bffr.Clear(); } catch (Exception ex) { // ConsoleFunctions.WriteErrorLine("Failed to send a packet!\n" + ex); Globals.ClientManager.PacketError(_client, ex); } }
public byte[] GetBytes(bool unloader = false) { var writer = new DataBuffer(new byte[0]); if (!unloader) { writer.WriteInt(X); writer.WriteInt(Z); writer.WriteBool(true); writer.WriteUShort(0xffff); // bitmap writer.WriteVarInt((Blocks.Length*2) + Skylight.Data.Length + Blocklight.Data.Length + BiomeId.Length); for (var i = 0; i < Blocks.Length; i++) { writer.WriteUShort((ushort) ((Blocks[i] << 4) | Metadata[i])); } writer.Write(Blocklight.Data); writer.Write(Skylight.Data); writer.Write(BiomeId); } else { writer.WriteInt(X); writer.WriteInt(Z); writer.WriteBool(true); writer.WriteUShort(0); writer.WriteVarInt(0); } return writer.ExportWriter; }
/// <summary> /// Flush all data to the TCPClient NetworkStream. /// </summary> public void FlushData(bool quee = false) { try { var allData = _bffr.ToArray(); _bffr.Clear(); if (ServerSettings.UseCompression && _client.PacketMode == PacketMode.Play && _client.SetCompressionSend) { bool isOver = (allData.Length >= ServerSettings.CompressionThreshold); int dataLength = isOver ? allData.Length : 0; //Calculate length of 'Data Length' byte[] dLength = GetVarIntBytes(dataLength); //Create all data var compressedBytes = ZlibStream.CompressBuffer(allData); int packetlength = compressedBytes.Length + dLength.Length; var dataToSend = isOver ? compressedBytes : allData; var compressed = new DataBuffer(_client); compressed.WriteVarInt(packetlength); compressed.WriteVarInt(dataLength); compressed.Write(dataToSend); Console.WriteLine(); Console.WriteLine("Packet bigger than Threshold: " + isOver); Console.WriteLine("Packet info: "); Console.WriteLine("(Header) Packet Length: " + packetlength); Console.WriteLine("(Header) Data Length: " + dataLength); Console.WriteLine("Data Length " + dataToSend.Length); Console.WriteLine("Length difference: " + (packetlength - dataToSend.Length)); Console.WriteLine(); _client.AddToQuee(compressed.ExportWriter, quee); } 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.AddToQuee(data.ToArray(), quee); } _bffr.Clear(); } catch (Exception ex) { // ConsoleFunctions.WriteErrorLine("Failed to send a packet!\n" + ex); Globals.ClientManager.PacketError(_client, ex); } }
public byte[] Export() { var buffer = new DataBuffer(new byte[0]); buffer.WriteInt(Blocks.Length); for (var i = 0; i < Blocks.Length; i++) buffer.WriteUShort(Blocks[i]); buffer.WriteInt(Blocks.Length); for (var i = 0; i < Blocks.Length; i++) buffer.WriteUShort((ushort) Metadata[i]); buffer.WriteInt(Blocklight.Data.Length); buffer.Write(Blocklight.Data); buffer.WriteInt(Skylight.Data.Length); buffer.Write(Skylight.Data); buffer.WriteInt(BiomeId.Length); buffer.Write(BiomeId); return buffer.ExportWriter; }