コード例 #1
0
        public void Write(BinaryWriterBE writer)
        {
            Byte flags = (Byte)(((Byte)Reliability << 5)
                                | (Split ? 0x10 : 0x00));

            writer.Write(flags);
        }
コード例 #2
0
        public void Write(BinaryWriterBE Writer)
        {
            Flags.Write(Writer);
            Writer.WriteBE(Length);

            if (Flags.IsReliable())
            {
                MessageIndex.Write(Writer);
            }

            if (Flags.IsSequenced())
            {
                SequenceIndex.Write(Writer);
            }

            if (Flags.IsSequenced() || Flags.IsOrdered())
            {
                OrderIndex.Write(Writer);
                Writer.Write(OrderChannel);
            }

            if (Flags.Split)
            {
                Writer.WriteBE(SplitCount);
                Writer.WriteBE(SplitId);
                Writer.WriteBE(SplitIndex);
            }

            Writer.Write(Payload);
        }
コード例 #3
0
        public void Write(BinaryWriterBE Writer)
        {
            Byte b1 = (Byte)(Number & 0xff);
            Byte b2 = (Byte)((Number >> 8) & 0xff);
            Byte b3 = (Byte)((Number >> 16) & 0xff);

            Writer.Write(b1);
            Writer.Write(b2);
            Writer.Write(b3);
        }
コード例 #4
0
 public void Send(IPEndPoint address, Packet packet)
 {
     using (var stream = new MemoryStream())
         using (var writer = new BinaryWriterBE(stream))
         {
             packet.Write(writer);
             stream.SetLength(stream.Position);
             Socket.Send(address, stream.ToArray());
         }
 }
コード例 #5
0
        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);
        }