/// <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); } }
/// <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 void SavePlayer() { byte[] health = HealthManager.Export(); byte[] inv = Inventory.GetBytes(); DataBuffer buffer = new DataBuffer(new byte[0]); buffer.WriteDouble(KnownPosition.X); buffer.WriteDouble(KnownPosition.Y); buffer.WriteDouble(KnownPosition.Z); buffer.WriteFloat(KnownPosition.Yaw); buffer.WriteFloat(KnownPosition.Pitch); buffer.WriteBool(KnownPosition.OnGround); buffer.WriteVarInt((int)Gamemode); buffer.WriteVarInt(health.Length); foreach (byte b in health) { buffer.WriteByte(b); } buffer.WriteVarInt(inv.Length); foreach (byte b in inv) { buffer.WriteByte(b); } byte[] data = buffer.ExportWriter; data = Globals.Compress(data); string savename = ServerSettings.OnlineMode ? Uuid : Username; File.WriteAllBytes("Players/" + savename + ".pdata", data); }
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; }