diff --git a/Projects/Server.Tests/Helpers/AssertExtensions.cs b/Projects/Server.Tests/Helpers/AssertExtensions.cs index abc230f25..2782a6c05 100644 --- a/Projects/Server.Tests/Helpers/AssertExtensions.cs +++ b/Projects/Server.Tests/Helpers/AssertExtensions.cs @@ -1,5 +1,4 @@ using System; -using System.Text; namespace Server.Tests { diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs index 526795be0..e3a044948 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs @@ -1,5 +1,4 @@ using System; -using System.Buffers; using System.Collections.Generic; using Server.Network; using Xunit; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs index 7ffdbf57a..0dc7a4245 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs @@ -1,6 +1,4 @@ using System; -using System.Buffers; -using Server.Items; using Server.Network; using Xunit; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs index f050a77ee..d14dbbdff 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs @@ -1,5 +1,4 @@ using System; -using System.Buffers; using Server.Network; using Xunit; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs index 7385fd9c1..700916515 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs @@ -1,7 +1,5 @@ using System; -using System.Buffers; using System.Collections.Generic; -using System.Linq; using Server.ContextMenus; using Server.Menus.ItemLists; using Server.Menus.Questions; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs index 190a4aa53..1857e2dc3 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs @@ -1,5 +1,4 @@ using System; -using System.Buffers; using Server.Network; using Xunit; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs index cd9264d01..86f59060f 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs @@ -1,5 +1,4 @@ using System; -using System.Buffers; using Server.Items; using Server.Network; using Xunit; diff --git a/Projects/Server/Network/Packets/TargetPackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs similarity index 62% rename from Projects/Server/Network/Packets/TargetPackets.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs index 05c14528b..e5dd5fc94 100644 --- a/Projects/Server/Network/Packets/TargetPackets.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPackets.cs @@ -1,18 +1,3 @@ -/************************************************************************* - * ModernUO * - * Copyright 2019-2020 - ModernUO Development Team * - * Email: hi@modernuo.com * - * File: TargetPackets.cs * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see . * - *************************************************************************/ - using System.IO; using Server.Targeting; diff --git a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs index 75173ed24..92a1f976a 100644 --- a/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs +++ b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs @@ -39,37 +39,14 @@ namespace Server.Tests.Network var p = new Point3D(1000, 100, 10); MultiTarget t = new TestMultiTarget(multiID, p); - var data = new MultiTargetReqHS(t).Compile(); + var expected = new MultiTargetReqHS(t).Compile(); - Span expectedData = stackalloc byte[30]; - var pos = 0; + using var ns = PacketTestUtilities.CreateTestNetState(); + ns.ProtocolChanges |= ProtocolChanges.HighSeas; + ns.SendMultiTargetReq(t); - expectedData.Write(ref pos, (byte)0x99); // Packet ID - expectedData.Write(ref pos, t.AllowGround); - expectedData.Write(ref pos, t.TargetID); - -#if NO_LOCAL_INIT - expectedData.Write(ref pos, 0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (ushort)0); -#else - pos += 12; -#endif - - expectedData.Write(ref pos, (short)t.MultiID); - expectedData.Write(ref pos, (ushort)t.Offset.X); - expectedData.Write(ref pos, (ushort)t.Offset.Y); - expectedData.Write(ref pos, (short)t.Offset.Z); - -#if NO_LOCAL_INIT - // Hue (4 bytes) - expectedData.Write(ref pos, 0); -#endif - - AssertThat.Equal(data, expectedData); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } [Fact] @@ -79,83 +56,37 @@ namespace Server.Tests.Network var p = new Point3D(1000, 100, 10); MultiTarget t = new TestMultiTarget(multiID, p); - var data = new MultiTargetReq(t).Compile(); + var expected = new MultiTargetReq(t).Compile(); - Span expectedData = stackalloc byte[26]; - var pos = 0; + using var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendMultiTargetReq(t); - expectedData.Write(ref pos, (byte)0x99); // Packet ID - expectedData.Write(ref pos, t.AllowGround); - expectedData.Write(ref pos, t.TargetID); - -#if NO_LOCAL_INIT - expectedData.Write(ref pos, 0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (ushort)0); -#else - pos += 12; -#endif - - expectedData.Write(ref pos, (short)t.MultiID); - expectedData.Write(ref pos, (ushort)t.Offset.X); - expectedData.Write(ref pos, (ushort)t.Offset.Y); - expectedData.Write(ref pos, (short)t.Offset.Z); - - AssertThat.Equal(data, expectedData); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } [Fact] public void TestCancelTarget() { - var data = new CancelTarget().Compile(); + var expected = new CancelTarget().Compile(); + using var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendCancelTarget(); - Span expectedData = stackalloc byte[19]; - var pos = 0; - - expectedData.Write(ref pos, (byte)0x6C); // Packet ID - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, 0); - expectedData.Write(ref pos, (byte)3); // Beneficial / Harmful - -#if NO_LOCAL_INIT - expectedData.Write(ref pos, 0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (ushort)0); -#endif - - AssertThat.Equal(data, expectedData); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } [Fact] public void TestTargetReq() { var t = new TestTarget(10, true, TargetFlags.Beneficial); - var data = new TargetReq(t).Compile(); + var expected = new TargetReq(t).Compile(); - Span expectedData = stackalloc byte[19]; - var pos = 0; + using var ns = PacketTestUtilities.CreateTestNetState(); + ns.SendTargetReq(t); - expectedData.Write(ref pos, (byte)0x6C); // Packet ID - expectedData.Write(ref pos, t.AllowGround); - expectedData.Write(ref pos, t.TargetID); - expectedData.Write(ref pos, (byte)t.Flags); - -#if NO_LOCAL_INIT - expectedData.Write(ref pos, 0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (ushort)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (byte)0); - expectedData.Write(ref pos, (ushort)0); -#endif - - AssertThat.Equal(data, expectedData); + var result = ns.SendPipe.Reader.TryRead(); + AssertThat.Equal(result.Buffer[0].AsSpan(0), expected); } } } diff --git a/Projects/Server/Mobiles/Mobile.cs b/Projects/Server/Mobiles/Mobile.cs index 0009fc53f..97b994895 100644 --- a/Projects/Server/Mobiles/Mobile.cs +++ b/Projects/Server/Mobiles/Mobile.cs @@ -1059,9 +1059,9 @@ namespace Server m_Target = newTarget; - if (newTarget != null && m_NetState != null && !TargetLocked) + if (newTarget != null && !TargetLocked) { - m_NetState.Send(newTarget.GetPacketFor(m_NetState)); + newTarget.SendTargetTo(m_NetState); } OnTargetChange(); diff --git a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs index 78c883f99..b9421e80e 100644 --- a/Projects/Server/Network/Packets/OutgoingMessagePackets.cs +++ b/Projects/Server/Network/Packets/OutgoingMessagePackets.cs @@ -16,7 +16,6 @@ using System; using System.Buffers; using System.IO; -using System.Linq; using System.Runtime.CompilerServices; namespace Server.Network diff --git a/Projects/Server/Network/Packets/OutgoingTargetPackets.cs b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs new file mode 100644 index 000000000..dac4fa87a --- /dev/null +++ b/Projects/Server/Network/Packets/OutgoingTargetPackets.cs @@ -0,0 +1,87 @@ +/************************************************************************* + * ModernUO * + * Copyright 2019-2020 - ModernUO Development Team * + * Email: hi@modernuo.com * + * File: OutgoingTargetPackets.cs * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + *************************************************************************/ + +using System; +using System.Buffers; +using Server.Targeting; + +namespace Server.Network +{ + public static class OutgoingTargetPackets + { + public static void SendMultiTargetReq(this NetState ns, MultiTarget t) + { + if (ns == null || !ns.GetSendBuffer(out var buffer)) + { + return; + } + + var writer = new CircularBufferWriter(buffer); + writer.Write((byte)0x99); // Packet ID + writer.Write(t.AllowGround); + writer.Write(t.TargetID); + writer.Write((byte)t.Flags); + writer.Clear(11); + writer.Write((short)t.MultiID); + writer.Write((short)t.Offset.X); + writer.Write((short)t.Offset.Y); + writer.Write((short)t.Offset.Z); + if (ns.HighSeas) + { + writer.Write(0); + } + + ns.Send(ref buffer, writer.Position); + } + + public static void SendCancelTarget(this NetState ns) + { + if (ns == null) + { + return; + } + + Span span = stackalloc byte[] + { + 0x6C, // Packet ID + 0, // Allow Ground? + 0, 0, 0, 0, // Target ID + 3, // Flags + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0 + }; + + ns.Send(span); + } + + public static void SendTargetReq(this NetState ns, Target t) + { + if (ns == null || !ns.GetSendBuffer(out var buffer)) + { + return; + } + + var writer = new CircularBufferWriter(buffer); + writer.Write((byte)0x6C); // Packet ID + writer.Write(t.AllowGround); + writer.Write(t.TargetID); + writer.Write((byte)t.Flags); + writer.Clear(12); + + ns.Send(ref buffer, writer.Position); + } + } +} diff --git a/Projects/Server/Targeting/MultiTarget.cs b/Projects/Server/Targeting/MultiTarget.cs index 4e6867803..24ffba3a8 100644 --- a/Projects/Server/Targeting/MultiTarget.cs +++ b/Projects/Server/Targeting/MultiTarget.cs @@ -18,14 +18,6 @@ namespace Server.Targeting public Point3D Offset { get; set; } - public override Packet GetPacketFor(NetState ns) - { - if (ns.HighSeas) - { - return new MultiTargetReqHS(this); - } - - return new MultiTargetReq(this); - } + public override void SendTargetTo(NetState ns) => ns.SendMultiTargetReq(this); } } diff --git a/Projects/Server/Targeting/Target.cs b/Projects/Server/Targeting/Target.cs index afc912c05..26ab65ec0 100644 --- a/Projects/Server/Targeting/Target.cs +++ b/Projects/Server/Targeting/Target.cs @@ -37,7 +37,7 @@ namespace Server.Targeting public static void Cancel(Mobile m) { - m.NetState?.Send(CancelTarget.Instance); + m.NetState.SendCancelTarget(); m.Target?.OnTargetCancel(m, TargetCancelType.Canceled); } @@ -68,7 +68,7 @@ namespace Server.Targeting OnTargetFinish(from); } - public virtual Packet GetPacketFor(NetState ns) => new TargetReq(this); + public virtual void SendTargetTo(NetState ns) => ns.SendTargetReq(this); public void Cancel(Mobile from, TargetCancelType type) { diff --git a/Projects/Server/World/World.cs b/Projects/Server/World/World.cs index 4ea98b54a..984910ffb 100644 --- a/Projects/Server/World/World.cs +++ b/Projects/Server/World/World.cs @@ -14,7 +14,6 @@ *************************************************************************/ using System; -using System.Buffers; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; diff --git a/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs b/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs index 73a04f4df..c5e4ce1a5 100644 --- a/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs +++ b/Projects/UOContent/Engines/ConPVP/Gumps/TournamentBracketGump.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using System.Collections; using System.Collections.Generic; using System.Text; diff --git a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs index d379028a9..4a37dee19 100644 --- a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs +++ b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs @@ -1,5 +1,4 @@ using System; -using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; using Server.ContextMenus; diff --git a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs index d830e8148..9030619cb 100644 --- a/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/HailStormSpell.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Server.Network; namespace Server.Spells.Mysticism { diff --git a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs index 4dd9a1a47..f927aba56 100644 --- a/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs +++ b/Projects/UOContent/Spells/Mysticism/NetherCycloneSpell.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Server.Network; namespace Server.Spells.Mysticism {