Exemplo n.º 1
0
        public void WriteToCustomPacket(CustomPacket packet)
        {
            byte flags = 0;

            flags |= (byte)((byte)Reliability << FLAG_RELIABILITY_INDEX);
            flags |= Split ? FLAG_SPLIT : (byte)0;

            packet.WriteByte(flags);
            packet.WriteUShort((ushort)(Payload.Length * 8));

            if (Reliability.IsReliable())
            {
                packet.WriteTriad(MessageIndex, ByteOrder.Little);
            }

            if (Reliability.IsOrdered() || Reliability.IsSequenced())
            {
                packet.WriteTriad(OrderIndex, ByteOrder.Little);
                packet.WriteByte(OrderChannel);
            }

            if (Split)
            {
                packet.WriteInt(SplitCount);
                packet.WriteUShort(SplitId);
                packet.WriteInt(SplitIndex);
            }

            packet.WriteBytes(Payload);
        }
Exemplo n.º 2
0
        public EncapsulatedPacket(CustomPacket packet)
        {
            byte flags = packet.ReadByte();

            Reliability = (Reliability)((flags & FLAG_RELIABILITY) >> FLAG_RELIABILITY_INDEX);
            Split       = (flags & FLAG_SPLIT) > 0;

            int length = packet.ReadUShort() / 8;

            if (Reliability.IsReliable())
            {
                MessageIndex = packet.ReadTriad(ByteOrder.Little);
            }

            if (Reliability.IsOrdered() || Reliability.IsSequenced())
            {
                OrderIndex   = packet.ReadTriad(ByteOrder.Little);
                OrderChannel = packet.ReadByte();
            }

            if (Split)
            {
                SplitCount = packet.ReadInt();
                SplitId    = packet.ReadUShort();
                SplitIndex = packet.ReadInt();
            }

            Payload = packet.ReadBytes(length);
        }
Exemplo n.º 3
0
 public int GetPacketSize()
 {
     return(1 + 2 + (Reliability.IsReliable() ? 3 : 0) +
            (Reliability.IsOrdered() || Reliability.IsSequenced() ? 4 : 0) +
            (Split ? 10 : 0) + Payload.Length);
 }