private void SendQueue() { using (NetworkStream ms = new NetworkStream(Socket)) { using (MinecraftStream mc = new MinecraftStream(ms)) { _sendStream = mc; while (!CancellationToken.IsCancellationRequested) { try { EnqueuedPacket packet = PacketWriteQueue.Take(CancellationToken.Token); var data = EncodePacket(packet); mc.WriteVarInt(data.Length); mc.Write(data); } catch (EndOfStreamException) { } catch (OperationCanceledException) { break; } } } } }
private byte[] EncodePacket(EnqueuedPacket enqueued) { var packet = enqueued.Packet; byte[] encodedPacket; using (MemoryStream ms = new MemoryStream()) { using (MinecraftStream mc = new MinecraftStream(ms)) { mc.WriteVarInt(packet.PacketId); packet.Encode(mc); encodedPacket = ms.ToArray(); mc.Position = 0; mc.SetLength(0); if (enqueued.CompressionEnabled) { if (encodedPacket.Length >= CompressionThreshold) { //byte[] compressed; //CompressData(encodedPacket, out compressed); mc.WriteVarInt(encodedPacket.Length); using (ZlibStream outZStream = new ZlibStream(mc, CompressionMode.Compress, CompressionLevel.Default, true)) { outZStream.Write(encodedPacket, 0, encodedPacket.Length); } // mc.Write(compressed); } else //Uncompressed { mc.WriteVarInt(0); mc.Write(encodedPacket); } encodedPacket = ms.ToArray(); } } } return(encodedPacket); }
private byte[] EncodePacket(EnqueuedPacket enqueued) { var packet = enqueued.Packet; byte[] encodedPacket; using (MemoryStream ms = new MemoryStream()) { using (MinecraftStream mc = new MinecraftStream(ms)) { mc.WriteVarInt(packet.PacketId); packet.Encode(mc); encodedPacket = ms.ToArray(); mc.Position = 0; mc.SetLength(0); if (enqueued.CompressionEnabled) { if (encodedPacket.Length >= CompressionThreshold) { byte[] compressed; CompressData(encodedPacket, out compressed); mc.WriteVarInt(encodedPacket.Length); mc.Write(compressed); } else //Uncompressed { mc.WriteVarInt(0); mc.Write(encodedPacket); } encodedPacket = ms.ToArray(); } } } return(encodedPacket); }