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()); } } }
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); } } }
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)); } }
/// <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); } } } }
/// <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(); } }
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()); } }
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); } } }
protected override RealmPacketIn CreatePacket(RealmPacketOut packet) { return(DisposableRealmPacketIn.CreateFromOutPacket(packet)); }
/// <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)); }