~ruther/NosSmooth.Local

cb3b3151e4b614e6ba8c94e48892723e85672ca8 — Rutherther 2 years ago 7cc1771
feat(client): accept optional hooks in command handlers
M src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs => src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/MateWalkCommandHandler.cs +12 -7
@@ 28,7 28,7 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
    /// </summary>
    public const string PetWalkControlGroup = "PetWalk";

    private readonly IPetWalkHook _petWalkHook;
    private readonly Optional<IPetWalkHook> _petWalkHook;
    private readonly Optional<PetManagerList> _petManagerList;
    private readonly NosThreadSynchronizer _threadSynchronizer;
    private readonly UserActionDetector _userActionDetector;


@@ 46,7 46,7 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
    /// <param name="options">The options.</param>
    public MateWalkCommandHandler
    (
        IPetWalkHook petWalkHook,
        Optional<IPetWalkHook> petWalkHook,
        Optional<PetManagerList> petManagerList,
        NosThreadSynchronizer threadSynchronizer,
        UserActionDetector userActionDetector,


@@ 67,11 67,16 @@ public class MateWalkCommandHandler : ICommandHandler<MateWalkCommand>
    {
        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<MateWalkCommand>
                (
                    () => _userActionDetector.NotUserAction<Result<bool>>
                    (
                        () => _petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y)
                        () => petWalkHook.WrapperFunction.Get()(selectedPet, (ushort)x, (ushort)y)
                    ),
                    ct
                ),

M src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs => src/Core/NosSmooth.LocalClient/CommandHandlers/Walk/PlayerWalkCommandHandler.cs +23 -6
@@ 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<PlayerWalkCommand>
    /// </summary>
    public const string PlayerWalkControlGroup = "PlayerWalk";

    private readonly PlayerManager _playerManager;
    private readonly IPlayerWalkHook _playerWalkHook;
    private readonly Optional<PlayerManager> _playerManager;
    private readonly Optional<IPlayerWalkHook> _playerWalkHook;
    private readonly NosThreadSynchronizer _threadSynchronizer;
    private readonly UserActionDetector _userActionDetector;
    private readonly INostaleClient _nostaleClient;


@@ 46,8 47,8 @@ public class PlayerWalkCommandHandler : ICommandHandler<PlayerWalkCommand>
    /// <param name="options">The options.</param>
    public PlayerWalkCommandHandler
    (
        PlayerManager playerManager,
        IPlayerWalkHook playerWalkHook,
        Optional<PlayerManager> playerManager,
        Optional<IPlayerWalkHook> playerWalkHook,
        NosThreadSynchronizer threadSynchronizer,
        UserActionDetector userActionDetector,
        INostaleClient nostaleClient,


@@ 65,16 66,32 @@ public class PlayerWalkCommandHandler : ICommandHandler<PlayerWalkCommand>
    /// <inheritdoc/>
    public async Task<Result> 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
        );


Do not follow this link