Esempio n. 1
0
        public void TestUpdatePacket()
        {
            var mgr = new BufferManager(2, 128);

            var segment1 = mgr.CheckOut();              // 1st buffer

            Assert.AreEqual(1, mgr.AvailableSegmentsCount);

            var segment2 = mgr.CheckOut();              // 1st buffer

            Assert.AreEqual(1, mgr.TotalBufferCount);
            Assert.AreEqual(0, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(2, segment2.Buffer.UsedSegmentCount);

            var segment3 = mgr.CheckOut();             // 2nd buffer

            Assert.AreEqual(2, mgr.TotalBufferCount);
            Assert.AreEqual(1, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(1, segment3.Buffer.UsedSegmentCount);

            segment3.DecrementUsage();
            Assert.AreEqual(2, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(0, segment3.Buffer.UsedSegmentCount);

            //using (var outPacket = new UpdatePacket(segment2))
            using (var outPacket = new UpdatePacket(128))
            {
                Assert.AreEqual(outPacket.PacketId, (PacketId)RealmServerOpCode.SMSG_UPDATE_OBJECT);

                outPacket.Write(15);
                outPacket.WriteCString("abc");

                using (var inPacket = DisposableRealmPacketIn.CreateFromOutPacket(segment1, outPacket))
                {
                    Assert.AreEqual(0, inPacket.ReadInt32());                                           //update count

                    Assert.AreEqual(15, inPacket.ReadInt32());
                    Assert.AreEqual("abc", inPacket.ReadCString());
                }

                outPacket.Reset();
                Assert.AreEqual(outPacket.PacketId, (PacketId)RealmServerOpCode.SMSG_UPDATE_OBJECT);

                outPacket.WriteCString("def");
                outPacket.WriteUShortBE(300);


                using (var inPacket = DisposableRealmPacketIn.CreateFromOutPacket(segment1, outPacket))
                {
                    Assert.AreEqual(0, inPacket.ReadInt32());                                           //update count
                    Assert.AreEqual((byte)0, inPacket.ReadByte());                                      //block count

                    Assert.AreEqual("def", inPacket.ReadCString());
                    Assert.AreEqual((ushort)300, inPacket.ReadUInt16BE());
                }
            }
        }
Esempio n. 2
0
 public static void DumpPacketOut(RealmAccount acc, RealmPacketOut packetOut, PacketSender sender)
 {
     if (CanDump(packetOut.PacketId))
     {
         var writer = GetTextWriter(acc);
         using (var packet = DisposableRealmPacketIn.CreateFromOutPacket(packetOut))
         {
             DumpPacket(packet, sender, false, writer);
         }
     }
 }
Esempio n. 3
0
 public static ParsedSegment Parse(RealmPacketOut realmPacketOut, PacketSender sender, PacketDefinition def)
 {
     using (var packetIn = DisposableRealmPacketIn.CreateFromOutPacket(realmPacketOut))
     {
         //if (packetIn.PacketID == RealmServerOpCode.SMSG_COMPRESSED_MOVE)
         //{
         //    using (var movePacket = ParseCompressedMove(packetIn))
         //    {
         //        return Parse(movePacket, sender, def);
         //    }
         //}
         return(Parse(packetIn, sender, def));
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Dumps the content of an Update packet to the console
        /// </summary>
        //public static void DumpUpdatePacket(RealmPacketOut packet)
        //{
        //    try
        //    {
        //        ParsedUpdatePacket.Dump(packet.GetPacketPayload(), false, m_updatePacketWriter);
        //        m_updatePacketWriter.Flush();
        //    }
        //    catch (Exception e)
        //    {
        //        OnException("Failed to parse Update-Packet.", e, packet.GetPacketPayload());
        //    }
        //}

        public static void DumpPacketOut(RealmAccount acc, byte[] packetOut, int offset, int length, PacketSender sender)
        {
            if (Dumps)
            {
                var writer = GetTextWriter(acc);
                using (var packet = DisposableRealmPacketIn.CreateFromOutPacket(packetOut, offset, length))
                {
                    if (CanDump(packet.PacketId))
                    {
                        DumpPacket(packet, sender, false, writer);
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// Lets the server handle the given packet, as though it was sent by this Client.
        /// </summary>
        /// <param name="dispose">Whether to dispose the packet after handling</param>
        /// <param name="wait">Whether to wait for the Packet finish processing</param>
        public void ReceiveCMSG(RealmPacketOut packet, bool dispose, bool wait)
        {
            var inPacket = DisposableRealmPacketIn.CreateFromOutPacket(packet);

            HandleCMSG(inPacket, wait);
            var evt = ServerReceivedPacket;

            if (evt != null)
            {
                evt(this, inPacket);
            }
            if (dispose)
            {
                packet.Close();
            }
        }
Esempio n. 6
0
        public void TestBufferManagerEtc()
        {
            var mgr = new BufferManager(2, 128);

            var segment1 = mgr.CheckOut();              // 1st buffer

            Assert.AreEqual(1, mgr.AvailableSegmentsCount);

            var segment2 = mgr.CheckOut();              // 1st buffer

            Assert.AreEqual(1, mgr.TotalBufferCount);
            Assert.AreEqual(0, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(2, segment2.Buffer.UsedSegmentCount);

            var segment3 = mgr.CheckOut();             // 2nd buffer

            Assert.AreEqual(2, mgr.TotalBufferCount);
            Assert.AreEqual(1, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(1, segment3.Buffer.UsedSegmentCount);

            segment3.DecrementUsage();
            Assert.AreEqual(2, mgr.AvailableSegmentsCount);
            //Assert.AreEqual(0, segment3.Buffer.UsedSegmentCount);

            using (var outPacket = new RealmPacketOut(RealmServerOpCode.CMSG_ACCEPT_TRADE))
            {
                outPacket.Position = outPacket.HeaderSize;
                outPacket.Write(1);
                outPacket.WriteCString("abc");

                var inPacket = DisposableRealmPacketIn.CreateFromOutPacket(segment1, outPacket);
                Assert.AreEqual(1, inPacket.ReadInt32());
                Assert.AreEqual("abc", inPacket.ReadCString());
            }

            using (var outPacket = new RealmPacketOut(RealmServerOpCode.CMSG_ACCEPT_TRADE))
            {
                outPacket.Position = outPacket.HeaderSize;
                outPacket.WriteCString("def");
                outPacket.Write(2);

                var inPacket = DisposableRealmPacketIn.CreateFromOutPacket(segment2, outPacket);
                Assert.AreEqual("def", inPacket.ReadCString());
                Assert.AreEqual(2, inPacket.ReadInt32());
            }
        }
Esempio n. 7
0
        public void TestEmptyStructure()
        {
            var def = new PacketDefinition(RealmServerOpCode.CMSG_SET_CHANNEL_WATCH, PacketSender.Client, new List <PacketSegmentStructure>());

            def.Init();

            using (var packet = new RealmPacketOut(RealmServerOpCode.CMSG_PLAYER_AI_CHEAT))
            {
                packet.WriteUInt((uint)SpellAttributes.CannotRemove);
                packet.WriteByte(0);

                using (var packetIn = DisposableRealmPacketIn.CreateFromOutPacket(packet))
                {
                    var parsedPacket = PacketParser.Parse(packetIn, PacketSender.Client, def);
                    Assert.AreEqual(0, parsedPacket.SubSegments.Count);
                }
            }
        }
Esempio n. 8
0
 protected override RealmPacketIn CreatePacket(RealmPacketOut packet)
 {
     return(DisposableRealmPacketIn.CreateFromOutPacket(packet));
 }
Esempio n. 9
0
 /// <summary>
 /// Creates a new PacketIn from the buffer of an existing PacketOut
 /// </summary>
 protected override RealmPacketIn CreatePacket(byte[] bytesOut, int offset, int length)
 {
     return(DisposableRealmPacketIn.CreateFromOutPacket(bytesOut, offset, length));
 }