Ejemplo n.º 1
0
        /// <summary>
        /// Creates Reliable Udp header from connectionRecord
        /// </summary>
        /// <param name="connectionRecord">Current <see cref="ReliableUdpConnectionRecord"/> (ConnectionRecord)</param>
        /// <returns></returns>
        internal static ReliableUdpHeader CreateReliableUdpHeader(ReliableUdpConnectionRecord connectionRecord)
        {
            ReliableUdpHeader header = new ReliableUdpHeader();

            //RU: запись номера передачи
            header.TransmissionId = connectionRecord.TransmissionId;
            //RU: тип сообщения
            header.ReliableUdpMessageType = connectionRecord.ReliableUdpMessageType;
            //RU: установка номера пакета для передачи
            header.PacketNumber = connectionRecord.SndNext;

            //RU: запись управляющих флагов
            ReliableUdpHeaderFlags flags = ReliableUdpHeaderFlags.None;

            //RU: выставляем комбинацию двух флагов для единственного сообщения
            //EN: set flags for single packet message
            if (connectionRecord.NumberOfPackets == 1)
            {
                flags = ReliableUdpHeaderFlags.FirstPacket | ReliableUdpHeaderFlags.LastPacket;
            }
            //RU: дополнительный флаг если нам не требуется подтверждение
            //EN: set additional flag if we don't need to use acknowledge mechanism
            if (connectionRecord.IsNoAnswerNeeded)
            {
                flags = flags | ReliableUdpHeaderFlags.NoAsk;
            }
            //RU: это первый пакет
            //EN: check for first packet
            if (connectionRecord.NumberOfPackets > 1 && connectionRecord.SndNext == 0)
            {
                flags = flags | ReliableUdpHeaderFlags.FirstPacket;
            }
            //RU: это последний пакет
            //EN: check for last packet
            if (connectionRecord.NumberOfPackets > 1 &&
                (connectionRecord.NumberOfPackets - connectionRecord.SndNext - 1 == 0))
            {
                flags = flags | ReliableUdpHeaderFlags.LastPacket;
            }
            //RU: записываем флаги
            header.Flags = flags;

            //RU: запись поля Options - размер всего сообщения
            //EN: if we've got first message we should write total size of message
            //EN: in header.Options
            if (header.Flags.HasFlag(ReliableUdpHeaderFlags.FirstPacket))
            {
                header.Options = connectionRecord.OutcomingStream.Length;
            }
            return(header);
        }
Ejemplo n.º 2
0
        internal static ReliableUdpHeader CreateReliableUdpHeader(Int32 transmissionId,
                                                                  ReliableUdpHeaderFlags flags,
                                                                  ReliableUdpMessageTypes reliableUdpMessageType,
                                                                  Int32 sequenceNumber, Int32 options)
        {
            ReliableUdpHeader header = new ReliableUdpHeader
            {
                TransmissionId         = transmissionId,
                Flags                  = flags,
                ReliableUdpMessageType = reliableUdpMessageType,
                PacketNumber           = sequenceNumber,
                Options                = options,
            };

            return(header);
        }
Ejemplo n.º 3
0
 internal static ReliableUdpHeader CreateReliableUdpHeader(Int32 transmissionId,
                                                       ReliableUdpHeaderFlags flags,
                                                       ReliableUdpMessageTypes reliableUdpMessageType,
                                                       Int32 sequenceNumber, Int32 options)
 {
     ReliableUdpHeader header = new ReliableUdpHeader
                            {
                              TransmissionId = transmissionId,
                              Flags = flags,
                              ReliableUdpMessageType = reliableUdpMessageType,
                              PacketNumber = sequenceNumber,
                              Options = options,
                            };
       return header;
 }