Пример #1
0
        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;
                        }
                    }
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }