From cb3b3151e4b614e6ba8c94e48892723e85672ca8 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Wed, 15 Feb 2023 20:48:59 +0100 Subject: [PATCH] feat(client): accept optional hooks in command handlers --- .../Walk/MateWalkCommandHandler.cs | 19 +++++++----- .../Walk/PlayerWalkCommandHandler.cs | 29 +++++++++++++++---- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs b/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs index adc6eef..911d0f8 100644 --- a/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs +++ b/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs @@ -28,7 +28,7 @@ public class MateWalkCommandHandler : ICommandHandler /// public const string PetWalkControlGroup = "PetWalk"; - private readonly IPetWalkHook _petWalkHook; + private readonly Optional _petWalkHook; private readonly Optional _petManagerList; private readonly NosThreadSynchronizer _threadSynchronizer; private readonly UserActionDetector _userActionDetector; @@ -46,7 +46,7 @@ public class MateWalkCommandHandler : ICommandHandler /// The options. public MateWalkCommandHandler ( - IPetWalkHook petWalkHook, + Optional petWalkHook, Optional petManagerList, NosThreadSynchronizer threadSynchronizer, UserActionDetector userActionDetector, @@ -67,11 +67,16 @@ public class MateWalkCommandHandler : ICommandHandler { if (!_petManagerList.TryGet(out var petManagerList)) { - return Result.FromError - ( + return new NeededModulesNotInitializedError - ("The mate walk command cannot be executed as PetManagerList is not present.", "PetManagerList") - ); + ("The mate walk command cannot be executed as PetManagerList is not present.", "PetManagerList"); + } + + if (!_petWalkHook.TryGet(out var petWalkHook)) + { + return + new NeededModulesNotInitializedError + ("The mate walk command cannot be executed as PetWalkHook is not present.", IHookManager.PetWalkName); } PetManager? selectedPet = petManagerList.FirstOrDefault(x => x.Pet.Id == command.MateId); @@ -88,7 +93,7 @@ public class MateWalkCommandHandler : ICommandHandler ( () => _userActionDetector.NotUserAction> ( - () => _petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y) + () => petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y) ), ct ), diff --git a/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs b/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs index 923a72f..6905ce3 100644 --- a/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs +++ b/src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs @@ -11,6 +11,7 @@ using NosSmooth.Core.Commands.Control; using NosSmooth.Core.Commands.Walking; using NosSmooth.Core.Extensions; using NosSmooth.LocalBinding; +using NosSmooth.LocalBinding.Errors; using NosSmooth.LocalBinding.Hooks; using NosSmooth.LocalBinding.Objects; using NosSmooth.LocalBinding.Structs; @@ -28,8 +29,8 @@ public class PlayerWalkCommandHandler : ICommandHandler /// public const string PlayerWalkControlGroup = "PlayerWalk"; - private readonly PlayerManager _playerManager; - private readonly IPlayerWalkHook _playerWalkHook; + private readonly Optional _playerManager; + private readonly Optional _playerWalkHook; private readonly NosThreadSynchronizer _threadSynchronizer; private readonly UserActionDetector _userActionDetector; private readonly INostaleClient _nostaleClient; @@ -46,8 +47,8 @@ public class PlayerWalkCommandHandler : ICommandHandler /// The options. public PlayerWalkCommandHandler ( - PlayerManager playerManager, - IPlayerWalkHook playerWalkHook, + Optional playerManager, + Optional playerWalkHook, NosThreadSynchronizer threadSynchronizer, UserActionDetector userActionDetector, INostaleClient nostaleClient, @@ -65,16 +66,32 @@ public class PlayerWalkCommandHandler : ICommandHandler /// public async Task HandleCommand(PlayerWalkCommand command, CancellationToken ct = default) { + if (!_playerManager.TryGet(out var playerManager)) + { + return new NeededModulesNotInitializedError + ("The player walk command cannot be executed as PlayerManager is not present.", "PlayerManager"); + } + + if (!_playerWalkHook.TryGet(out var playerWalkHook)) + { + return + new NeededModulesNotInitializedError + ( + "The player walk command cannot be executed as PlayerWalkHook is not present.", + IHookManager.CharacterWalkName + ); + } + var handler = new ControlCommandWalkHandler ( _nostaleClient, async (x, y, ct) => await _threadSynchronizer.SynchronizeAsync ( - () => _userActionDetector.NotUserWalk(_playerWalkHook, x, y), + () => _userActionDetector.NotUserWalk(playerWalkHook, x, y), ct ), - _playerManager, + playerManager, _options ); -- 2.48.1