From ae436cb55f81ba192259e53726df2bd4f0757c47 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Sun, 8 Nov 2020 12:09:26 -0800 Subject: [PATCH] Fix bad serials (#304) - [X] Fixes bad serial calculations - [X] Tightens HexStrings Bumps release version Updates documentation --- .../{ => Fixtures}/ServerFixture.cs | 0 .../{ => Fixtures}/TestMapDefinitions.cs | 0 .../Server.Tests/Helpers/AssertExtensions.cs | 15 ++++++++ .../{Utility => Helpers}/EncodingHelpers.cs | 0 .../Utilities => Mocks}/MockAccount.cs | 0 .../Packets/Utilities => Mocks}/MockSocket.cs | 0 .../Packets}/Outgoing/AccountPacketTests.cs | 0 .../Packets}/Outgoing/AccountPackets.cs | 0 .../Outgoing/AttributeNormalizerTests.cs | 0 .../Packets}/Outgoing/CombatPacketTests.cs | 0 .../Packets}/Outgoing/CombatPackets.cs | 0 .../Packets}/Outgoing/DamagePacketTests.cs | 0 .../Packets}/Outgoing/DamagePackets.cs | 0 .../Outgoing/DisplayHuePickerTests.cs | 0 .../Packets}/Outgoing/EffectPacketTests.cs | 0 .../Packets}/Outgoing/EquipmentPacketTests.cs | 0 .../Packets}/Outgoing/GumpPacketTests.cs | 0 .../Packets}/Outgoing/ItemPacketTests.cs | 0 .../Packets}/Outgoing/LightPacketTests.cs | 0 .../Packets}/Outgoing/MapPacketTests.cs | 0 .../Packets}/Outgoing/MenuPacketTests.cs | 0 .../Network/Packets}/Outgoing/MessageTests.cs | 0 .../Packets}/Outgoing/MobilePacketTests.cs | 0 .../Packets}/Outgoing/MovementPacketTests.cs | 0 .../Outgoing/ObjectHelpResponseTests.cs | 0 .../Packets}/Outgoing/PlayerPacketTests.cs | 0 .../Outgoing/SecureTradePacketTests.cs | 0 .../Packets}/Outgoing/TargetPacketsTests.cs | 0 .../Packets}/Outgoing/UnicodePromptTests.cs | 0 .../Packets}/Outgoing/VendorBuyPacketTests.cs | 0 .../Outgoing/VendorSellPacketTests.cs | 0 .../AttributeNormalizerUtilities.cs | 0 .../Packets/Utilities}/GumpUtilities.cs | 0 .../Packets/Utilities/PacketTestUtilities.cs | 0 .../{ => Tests}/Network/PipeTests.cs | 0 .../Utility/ActivatorExtensionsTests.cs | 0 .../Tests/Utility}/HexStringConverterTest.cs | 11 +++++- .../Utility/StringHelperTests.cs} | 0 .../Server.Tests/Utility/AssertExtensions.cs | 24 ------------ .../Server/Utilities/HexStringConverter.cs | 38 ++++++++++++++++++- Projects/Server/World/World.cs | 29 ++++++-------- .../Security/MD5PasswordProtection.cs | 2 +- .../Security/PBKDF2PasswordProtection.cs | 2 +- .../Security/SHA1PasswordProtection.cs | 2 +- .../Security/SHA2PasswordProtection.cs | 2 +- version.json | 2 +- 46 files changed, 76 insertions(+), 51 deletions(-) rename Projects/Server.Tests/{ => Fixtures}/ServerFixture.cs (100%) rename Projects/Server.Tests/{ => Fixtures}/TestMapDefinitions.cs (100%) create mode 100644 Projects/Server.Tests/Helpers/AssertExtensions.cs rename Projects/Server.Tests/{Utility => Helpers}/EncodingHelpers.cs (100%) rename Projects/Server.Tests/{Network/Packets/Utilities => Mocks}/MockAccount.cs (100%) rename Projects/Server.Tests/{Network/Packets/Utilities => Mocks}/MockSocket.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/AccountPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/AccountPackets.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/AttributeNormalizerTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/CombatPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/CombatPackets.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/DamagePacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/DamagePackets.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/DisplayHuePickerTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/EffectPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/EquipmentPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/GumpPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/ItemPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/LightPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/MapPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/MenuPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/MessageTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/MobilePacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/MovementPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/ObjectHelpResponseTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/PlayerPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/SecureTradePacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/TargetPacketsTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/UnicodePromptTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/VendorBuyPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets/Old => Tests/Network/Packets}/Outgoing/VendorSellPacketTests.cs (100%) rename Projects/Server.Tests/{Network/Packets => Tests/Network/Packets/Utilities}/AttributeNormalizerUtilities.cs (100%) rename Projects/Server.Tests/{Network/Packets => Tests/Network/Packets/Utilities}/GumpUtilities.cs (100%) rename Projects/Server.Tests/{ => Tests}/Network/Packets/Utilities/PacketTestUtilities.cs (100%) rename Projects/Server.Tests/{ => Tests}/Network/PipeTests.cs (100%) rename Projects/Server.Tests/{ => Tests}/Utility/ActivatorExtensionsTests.cs (100%) rename Projects/{UOContent.Tests/Misc => Server.Tests/Tests/Utility}/HexStringConverterTest.cs (52%) rename Projects/Server.Tests/{Utility/TestStringHelpers.cs => Tests/Utility/StringHelperTests.cs} (100%) delete mode 100644 Projects/Server.Tests/Utility/AssertExtensions.cs diff --git a/Projects/Server.Tests/ServerFixture.cs b/Projects/Server.Tests/Fixtures/ServerFixture.cs similarity index 100% rename from Projects/Server.Tests/ServerFixture.cs rename to Projects/Server.Tests/Fixtures/ServerFixture.cs diff --git a/Projects/Server.Tests/TestMapDefinitions.cs b/Projects/Server.Tests/Fixtures/TestMapDefinitions.cs similarity index 100% rename from Projects/Server.Tests/TestMapDefinitions.cs rename to Projects/Server.Tests/Fixtures/TestMapDefinitions.cs diff --git a/Projects/Server.Tests/Helpers/AssertExtensions.cs b/Projects/Server.Tests/Helpers/AssertExtensions.cs new file mode 100644 index 000000000..abc230f25 --- /dev/null +++ b/Projects/Server.Tests/Helpers/AssertExtensions.cs @@ -0,0 +1,15 @@ +using System; +using System.Text; + +namespace Server.Tests +{ + public static class AssertThat + { + // TODO: Swap actual and expected to match Assert + public static void Equal(ReadOnlySpan actual, ReadOnlySpan expected) => + Xunit.Assert.True( + expected.SequenceEqual(actual), + $"Expected does not match actual.\nExpected:\t{expected.ToDelimitedHexString()}\nActual:\t\t{actual.ToDelimitedHexString()}" + ); + } +} diff --git a/Projects/Server.Tests/Utility/EncodingHelpers.cs b/Projects/Server.Tests/Helpers/EncodingHelpers.cs similarity index 100% rename from Projects/Server.Tests/Utility/EncodingHelpers.cs rename to Projects/Server.Tests/Helpers/EncodingHelpers.cs diff --git a/Projects/Server.Tests/Network/Packets/Utilities/MockAccount.cs b/Projects/Server.Tests/Mocks/MockAccount.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Utilities/MockAccount.cs rename to Projects/Server.Tests/Mocks/MockAccount.cs diff --git a/Projects/Server.Tests/Network/Packets/Utilities/MockSocket.cs b/Projects/Server.Tests/Mocks/MockSocket.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Utilities/MockSocket.cs rename to Projects/Server.Tests/Mocks/MockSocket.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/AccountPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/AccountPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/AccountPackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPackets.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/AccountPackets.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/AccountPackets.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/AttributeNormalizerTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/AttributeNormalizerTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/AttributeNormalizerTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/AttributeNormalizerTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/CombatPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/CombatPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/CombatPackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPackets.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/CombatPackets.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/CombatPackets.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/DamagePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/DamagePacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/DamagePackets.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePackets.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/DamagePackets.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/DamagePackets.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/DisplayHuePickerTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/DisplayHuePickerTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/DisplayHuePickerTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/DisplayHuePickerTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/EffectPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/EffectPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/EffectPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/EquipmentPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/EquipmentPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/EquipmentPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/GumpPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/GumpPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/GumpPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/ItemPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/ItemPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/ItemPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/LightPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/LightPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/LightPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/MapPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MapPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/MapPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/MapPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/MenuPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/MenuPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/MenuPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/MessageTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/MessageTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/MessageTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/MobilePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/MobilePacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/MobilePacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/MovementPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/MovementPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/MovementPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/ObjectHelpResponseTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/ObjectHelpResponseTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/ObjectHelpResponseTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/ObjectHelpResponseTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/PlayerPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/PlayerPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/PlayerPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/SecureTradePacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/SecureTradePacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/SecureTradePacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/TargetPacketsTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/TargetPacketsTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/TargetPacketsTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/UnicodePromptTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/UnicodePromptTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/UnicodePromptTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/UnicodePromptTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/VendorBuyPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/VendorBuyPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorBuyPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/Old/Outgoing/VendorSellPacketTests.cs b/Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Old/Outgoing/VendorSellPacketTests.cs rename to Projects/Server.Tests/Tests/Network/Packets/Outgoing/VendorSellPacketTests.cs diff --git a/Projects/Server.Tests/Network/Packets/AttributeNormalizerUtilities.cs b/Projects/Server.Tests/Tests/Network/Packets/Utilities/AttributeNormalizerUtilities.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/AttributeNormalizerUtilities.cs rename to Projects/Server.Tests/Tests/Network/Packets/Utilities/AttributeNormalizerUtilities.cs diff --git a/Projects/Server.Tests/Network/Packets/GumpUtilities.cs b/Projects/Server.Tests/Tests/Network/Packets/Utilities/GumpUtilities.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/GumpUtilities.cs rename to Projects/Server.Tests/Tests/Network/Packets/Utilities/GumpUtilities.cs diff --git a/Projects/Server.Tests/Network/Packets/Utilities/PacketTestUtilities.cs b/Projects/Server.Tests/Tests/Network/Packets/Utilities/PacketTestUtilities.cs similarity index 100% rename from Projects/Server.Tests/Network/Packets/Utilities/PacketTestUtilities.cs rename to Projects/Server.Tests/Tests/Network/Packets/Utilities/PacketTestUtilities.cs diff --git a/Projects/Server.Tests/Network/PipeTests.cs b/Projects/Server.Tests/Tests/Network/PipeTests.cs similarity index 100% rename from Projects/Server.Tests/Network/PipeTests.cs rename to Projects/Server.Tests/Tests/Network/PipeTests.cs diff --git a/Projects/Server.Tests/Utility/ActivatorExtensionsTests.cs b/Projects/Server.Tests/Tests/Utility/ActivatorExtensionsTests.cs similarity index 100% rename from Projects/Server.Tests/Utility/ActivatorExtensionsTests.cs rename to Projects/Server.Tests/Tests/Utility/ActivatorExtensionsTests.cs diff --git a/Projects/UOContent.Tests/Misc/HexStringConverterTest.cs b/Projects/Server.Tests/Tests/Utility/HexStringConverterTest.cs similarity index 52% rename from Projects/UOContent.Tests/Misc/HexStringConverterTest.cs rename to Projects/Server.Tests/Tests/Utility/HexStringConverterTest.cs index a8a62964a..717c19f5d 100644 --- a/Projects/UOContent.Tests/Misc/HexStringConverterTest.cs +++ b/Projects/Server.Tests/Tests/Utility/HexStringConverterTest.cs @@ -7,13 +7,20 @@ namespace Server.Tests.Accounting { [Theory] [InlineData("ABCDEF1234", new byte[] { 0xAB, 0xCD, 0xEF, 0x12, 0x34 })] - public void ConvertsProperly(string input, byte[] bytes) + public void TestGetBytes(string input, byte[] bytes) { Span outputBytes = stackalloc byte[input.Length / 2]; HexStringConverter.GetBytes(input, outputBytes); Assert.Equal(bytes, outputBytes.ToArray()); - Assert.Equal(input, HexStringConverter.GetString(bytes)); + Assert.Equal(input, bytes.ToHexString()); + } + + [Theory] + [InlineData("[AB, CD, EF, 12, 34]", new byte[] { 0xAB, 0xCD, 0xEF, 0x12, 0x34 })] + public void TestsGetStringDelimited(string expected, byte[] bytes) + { + Assert.Equal(expected, bytes.ToDelimitedHexString()); } } } diff --git a/Projects/Server.Tests/Utility/TestStringHelpers.cs b/Projects/Server.Tests/Tests/Utility/StringHelperTests.cs similarity index 100% rename from Projects/Server.Tests/Utility/TestStringHelpers.cs rename to Projects/Server.Tests/Tests/Utility/StringHelperTests.cs diff --git a/Projects/Server.Tests/Utility/AssertExtensions.cs b/Projects/Server.Tests/Utility/AssertExtensions.cs deleted file mode 100644 index 42e86b7b3..000000000 --- a/Projects/Server.Tests/Utility/AssertExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Text; - -namespace Server.Tests -{ - public static class AssertThat - { - public static string SpanToString(ReadOnlySpan bytes) - { - var builder = new StringBuilder(); - builder.Append("["); - builder.AppendJoin(", ", bytes.ToArray()); - builder.Append("]"); - - return builder.ToString(); - } - - public static void Equal(ReadOnlySpan actual, ReadOnlySpan expected) => - Xunit.Assert.True( - expected.SequenceEqual(actual), - $"Expected does not match actual.\nExpected:\t{SpanToString(expected)}\nActual:\t\t{SpanToString(actual)}" - ); - } -} diff --git a/Projects/Server/Utilities/HexStringConverter.cs b/Projects/Server/Utilities/HexStringConverter.cs index 09891c71a..5056581bf 100644 --- a/Projects/Server/Utilities/HexStringConverter.cs +++ b/Projects/Server/Utilities/HexStringConverter.cs @@ -17,7 +17,7 @@ using System; namespace Server { - public class HexStringConverter + public static class HexStringConverter { public static readonly uint[] m_Lookup32Chars = CreateLookup32Chars(); @@ -40,7 +40,11 @@ namespace Server return result; } - public static unsafe string GetString(ReadOnlySpan bytes) + public static string ToHexString(this byte[] bytes) => new ReadOnlySpan(bytes).ToHexString(); + + public static string ToHexString(this Span bytes) => ((ReadOnlySpan)bytes).ToHexString(); + + public static unsafe string ToHexString(this ReadOnlySpan bytes) { var result = new string((char)0, bytes.Length * 2); fixed (char* resultP = result) @@ -55,6 +59,36 @@ namespace Server return result; } + public static string ToDelimitedHexString(this byte[] bytes) => ((ReadOnlySpan)bytes).ToDelimitedHexString(); + + public static unsafe string ToDelimitedHexString(this ReadOnlySpan bytes) + { + const uint delimiter = 0x20002C; // ", " + const char openBracket = '['; + const char closeBracket = ']'; + var length = bytes.Length * 4; // len * 2 + (len - 1) * 2 + 2 + + var result = new string((char)0, length); + fixed (char* resultP = result) + { + resultP[0] = openBracket; + resultP[length - 1] = closeBracket; + + var resultP2 = (uint*)(resultP + 1); + for (int a = 0, i = 0; a < bytes.Length; a++, i++) + { + if (a > 0) + { + resultP2[i++] = delimiter; + } + + resultP2[i] = m_Lookup32Chars[bytes[a]]; + } + } + + return result; + } + public static unsafe void GetBytes(string str, Span bytes) { fixed (char* strP = str) diff --git a/Projects/Server/World/World.cs b/Projects/Server/World/World.cs index f5c15783e..756b7b42e 100644 --- a/Projects/Server/World/World.cs +++ b/Projects/Server/World/World.cs @@ -39,15 +39,14 @@ namespace Server public static class World { private static readonly ManualResetEvent m_DiskWriteHandle = new ManualResetEvent(true); - - private static Dictionary _pendingAdd; - private static Dictionary _pendingDelete; - private static ConcurrentQueue _decayQueue = new ConcurrentQueue(); + private static readonly Dictionary _pendingAdd = new Dictionary(); + private static readonly Dictionary _pendingDelete = new Dictionary(); + private static readonly ConcurrentQueue _decayQueue = new ConcurrentQueue(); public const uint ItemOffset = 0x40000000; public const uint MaxItemSerial = 0x7FFFFFFF; - private const uint _maxItems = int.MaxValue - ItemOffset; - private const uint _maxMobiles = ItemOffset; + public const uint MaxMobileSerial = ItemOffset - 1; + private const uint _maxItems = MaxItemSerial - ItemOffset + 1; private static Serial _lastMobile = Serial.Zero; private static Serial _lastItem = ItemOffset; @@ -59,19 +58,18 @@ namespace Server { uint last = _lastMobile; - for (int i = 0; i < _maxMobiles; i++) + for (int i = 0; i < MaxMobileSerial; i++) { last++; - if (last >= _lastMobile) + if (last > MaxMobileSerial) { - last = 0; + last = 1; } if (FindMobile(last) == null) { - _lastMobile = last; - return last; + return _lastMobile = last; } } @@ -89,15 +87,14 @@ namespace Server { last++; - if (last - ItemOffset >= _maxItems) + if (last > MaxItemSerial) { last = ItemOffset; } if (FindItem(last) == null) { - _lastItem = last; - return last; + return _lastItem = last; } } @@ -117,7 +114,6 @@ namespace Server } } - internal static int _Saves; internal static List ItemTypes { get; } = new List(); internal static List MobileTypes { get; } = new List(); @@ -361,9 +357,6 @@ namespace Server var watch = Stopwatch.StartNew(); - _pendingAdd = new Dictionary(); - _pendingDelete = new Dictionary(); - List> items; List> mobiles; List> guilds; diff --git a/Projects/UOContent/Accounting/Security/MD5PasswordProtection.cs b/Projects/UOContent/Accounting/Security/MD5PasswordProtection.cs index 41fe9c17f..ab1eca3eb 100644 --- a/Projects/UOContent/Accounting/Security/MD5PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/MD5PasswordProtection.cs @@ -30,7 +30,7 @@ namespace Server.Accounting.Security var bytes = new byte[Encoding.ASCII.GetByteCount(password)]; Encoding.ASCII.GetBytes(password, bytes); - return HexStringConverter.GetString(m_MD5HashProvider.ComputeHash(bytes)); + return m_MD5HashProvider.ComputeHash(bytes).ToHexString(); } public bool ValidatePassword(string encryptedPassword, string plainPassword) => diff --git a/Projects/UOContent/Accounting/Security/PBKDF2PasswordProtection.cs b/Projects/UOContent/Accounting/Security/PBKDF2PasswordProtection.cs index 5ff5b6c19..ec2789b4f 100644 --- a/Projects/UOContent/Accounting/Security/PBKDF2PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/PBKDF2PasswordProtection.cs @@ -39,7 +39,7 @@ namespace Server.Accounting.Security rfc2898.Salt.CopyTo(output.Slice(2, m_SaltSize)); rfc2898.GetBytes(m_HashSize).CopyTo(output.Slice(m_SaltSize + 2)); - return HexStringConverter.GetString(output); + return output.ToHexString(); } public bool ValidatePassword(string encryptedPassword, string plainPassword) diff --git a/Projects/UOContent/Accounting/Security/SHA1PasswordProtection.cs b/Projects/UOContent/Accounting/Security/SHA1PasswordProtection.cs index f28d58e42..c0c73ffe7 100644 --- a/Projects/UOContent/Accounting/Security/SHA1PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/SHA1PasswordProtection.cs @@ -30,7 +30,7 @@ namespace Server.Accounting.Security var bytes = new byte[Encoding.ASCII.GetByteCount(password)]; Encoding.ASCII.GetBytes(password, bytes); - return HexStringConverter.GetString(m_SHA1HashProvider.ComputeHash(bytes)); + return m_SHA1HashProvider.ComputeHash(bytes).ToHexString(); } public bool ValidatePassword(string encryptedPassword, string plainPassword) => diff --git a/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs b/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs index b0bec0d73..aa9fd5d19 100644 --- a/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs @@ -30,7 +30,7 @@ namespace Server.Accounting.Security var bytes = new byte[Encoding.ASCII.GetByteCount(password)]; Encoding.ASCII.GetBytes(password, bytes); - return HexStringConverter.GetString(m_SHA2HashProvider.ComputeHash(bytes)); + return m_SHA2HashProvider.ComputeHash(bytes).ToHexString(); } public bool ValidatePassword(string encryptedPassword, string plainPassword) => diff --git a/version.json b/version.json index 830bbe611..403de5449 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "0.8.0" + "version": "0.8.1" }