public void Read(BinaryReaderBE reader)
        {
            Byte flags = reader.ReadByte();

            Split       = (flags & 0x10) == 0x10;
            Reliability = (EncapsulatedReliability)(flags >> 5);
        }
        public void SendEncapsulated(Packet packet, EncapsulatedReliability reliability)
        {
            var dataPkt = new DataPacket();

            dataPkt.Id = (byte)PacketId.EncapsulatedData;
            dataPkt.Sequence.Number = NextPacketId++;

            var encapPkt = new EncapsulatedPacket();

            encapPkt.Flags.Reliability = reliability;
            if (encapPkt.Flags.IsReliable())
            {
                encapPkt.MessageIndex.Number = NextReliableId++;
            }

            if (encapPkt.Flags.IsSequenced())
            {
                encapPkt.SequenceIndex.Number = NextSequenceId++;
            }

            if (encapPkt.Flags.IsSequenced() || encapPkt.Flags.IsOrdered())
            {
                encapPkt.OrderChannel      = 0;
                encapPkt.OrderIndex.Number = NextOrderId++;
            }

            using (var memory = new MemoryStream())
                using (var stream = new BinaryWriterBE(memory))
                {
                    packet.Write(stream);
                    memory.SetLength(memory.Position);
                    encapPkt.Payload = memory.ToArray();
                    encapPkt.Length  = (UInt16)(encapPkt.Payload.Length * 8);
                }

            dataPkt.WrappedPacket = encapPkt;
            Socket.Send(Address, dataPkt);
        }