示例#1
0
        private static void TestSerializerPacketB()
        {
            Serializer    sender     = new WriterSerialize();
            List <IActor> senderList = new List <IActor>();
            Tank          t          = new Tank()
            {
                Name = "Toto", Life = 100, Position = new Vector2(150), ShouldBeSend = true
            };

            t.Shoot();
            senderList.Add(t);
            senderList.Add(new Loot()
            {
                NbOfAmmo = 1, AmmoType = eAmmoType.Grenada, Position = new Vector2(150), IsActive = true, ShouldBeSend = true
            });
            senderList.Add(new Tank()
            {
                Name = "Tata", Life = 80, Position = new Vector2(100), ShouldBeSend = true
            });
            senderList.Add(new Loot()
            {
                AmmoType = eAmmoType.Bullet, Position = new Vector2(360), IsActive = true, ShouldBeSend = true
            });
            senderList.Add(new Tank()
            {
                Life = 50, Position = new Vector2(50), ShouldBeSend = true
            });

            PacketB sendedPacket = new PacketB()
            {
                Actors = senderList
            };
            bool sendingAuthorized = sendedPacket.Serialize(sender);

            sender.BitPacking.PushTempInBuffer();

            byte[] dataSending = sender.BitPacking.GetByteBuffer();

            if (sendingAuthorized)
            {
                Serializer receiver = new ReaderSerialize();
                receiver.BitPacking = BitPacker.FromArray(dataSending);
                List <IActor> receiverList   = new List <IActor>();
                PacketB       receivedPacket = new PacketB()
                {
                    Actors = receiverList
                };
                bool isValid = receivedPacket.Serialize(receiver);
            }
        }
示例#2
0
        public bool ProcessPacket(Packet pPacket)
        {
            pPacket.Header = PrepareFrame(_shouldClean);                                            // CRC + Sequence

            Debug.Assert(!Program.StopOnSequence.HasValue || CurrentSequence != Program.StopOnSequence.Value);
            int bitCounter = FrameSerializer.BitPacking.BitLength;
            int id         = dFactory.GetID(pPacket);

#if TRACE_LOG
            Log("Packet ID : ");
#endif
            FrameSerializer.Serialize(ref id, 0, dFactory.Count() - 1);                              // Packet ID
#if TRACE_LOG
            Log("Packet Data : ");
#endif
            if (!pPacket.Serialize(FrameSerializer))                                                 // Data
            {
#if DEBUG
                if (pPacket is PacketB)
#endif
                {
#if DEBUG
                    PacketB p = (PacketB)pPacket;
                    if (p.Actors.Count == 0)
#endif
                    {
                        FrameSerializer.BitPacking.Clear();
                        FrameSerializer.Error = false;
                        return(false);
                    }
                }
            }

            if (FrameSerializer.BitPacking.ByteLength > MTU)
            {
                SplitPacketIntoFragments();
            }
            else
            {
                AddCrcOnHeader(pPacket.Header);
            }

            CurrentSequence++;
            _shouldClean = true;
            return(!FrameSerializer.Error);
        }
示例#3
0
        private static Packet GetPacketB()
        {
            PacketB p = new PacketB();

            p.Actors = new List <IActor>();
            Tank t = new Tank()
            {
                Name = "Toto", Life = 100, Position = new Vector2(150), ShouldBeSend = true
            };

            t.Shoot();
            p.Actors.Add(t);
            for (int i = 0; i < 50; i++)
            {
                p.Actors.Add(new Loot()
                {
                    NbOfAmmo = 0, AmmoType = eAmmoType.Grenada, Position = new Vector2(150), IsActive = true, ShouldBeSend = true
                });
            }
            return(p);
        }