~ruther/NosSmooth.Local

2bafe069fe611a1a9430049cb07c376825f81d00 — Rutherther 2 years ago a9c7dc4
feat(binding): do not activate the hook if not needed
A src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs => src/Core/NosSmooth.LocalBinding/Extensions/HookExtensions.cs +32 -0
@@ 0,0 1,32 @@
//
//  HookExtensions.cs
//
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using Reloaded.Hooks.Definitions;

namespace NosSmooth.LocalBinding.Extensions;

/// <summary>
/// Extensions methods for <see cref="HookExtensions"/>.
/// </summary>
public static class HookExtensions
{
    /// <summary>
    /// Enables the hook if it is active.
    /// Activate it if it wasn't activated.
    /// </summary>
    /// <param name="hook">The hook to enable or activate.</param>
    public static void EnableOrActivate(this IHook hook)
    {
        if (!hook.IsHookActivated)
        {
            hook.Activate();
        }
        else
        {
            hook.Enable();
        }
    }
}
\ No newline at end of file

M src/Core/NosSmooth.LocalBinding/NosBindingManager.cs => src/Core/NosSmooth.LocalBinding/NosBindingManager.cs +2 -3
@@ 363,10 363,9 @@ public class NosBindingManager : IDisposable
                callbackFunction,
                walkFunctionAddress.Offset + (int)_browserManager.Process.MainModule!.BaseAddress + options.Offset
            );
            hook.Activate();
            if (!options.Hook)
            if (options.Hook)
            {
                hook.Disable();
                hook.Activate();
            }

            return Result<IHook<TFunction>>.FromSuccess(hook);

M src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs +3 -2
@@ 7,6 7,7 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using NosSmooth.LocalBinding.Errors;
using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Options;
using Reloaded.Hooks.Definitions;
using Reloaded.Hooks.Definitions.X86;


@@ 153,8 154,8 @@ public class NetworkBinding
    /// </summary>
    public void EnableHooks()
    {
        _receiveHook.Enable();
        _sendHook.Enable();
        _receiveHook.EnableOrActivate();
        _sendHook.EnableOrActivate();
    }

    /// <summary>

M src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs +2 -1
@@ 4,6 4,7 @@
//  Copyright (c) František Boháček. All rights reserved.
//  Licensed under the MIT license. See LICENSE file in the project root for full license information.

using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Options;
using NosSmooth.LocalBinding.Structs;
using Reloaded.Hooks.Definitions;


@@ 102,7 103,7 @@ public class PetManagerBinding
    /// </summary>
    public void EnableHooks()
    {
        _petWalkHook.Enable();
        _petWalkHook.EnableOrActivate();
    }

    /// <summary>

M src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs +4 -3
@@ 6,6 6,7 @@

using System.Diagnostics;
using NosSmooth.LocalBinding.Errors;
using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Options;
using NosSmooth.LocalBinding.Structs;
using Reloaded.Hooks.Definitions;


@@ 146,9 147,9 @@ public class PlayerManagerBinding
    /// </summary>
    public void EnableHooks()
    {
        _followHook.Enable();
        _unfollowHook.Enable();
        _walkHook.Enable();
        _followHook.EnableOrActivate();
        _unfollowHook.EnableOrActivate();
        _walkHook.EnableOrActivate();
    }

    /// <summary>

M src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs +1 -2
@@ 10,7 10,6 @@ using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Options;
using NosSmooth.LocalBinding.Structs;
using Reloaded.Hooks.Definitions;
using Reloaded.Hooks.Definitions.Enums;
using Reloaded.Hooks.Definitions.X86;
using Remora.Results;



@@ 122,7 121,7 @@ public class UnitManagerBinding
    /// </summary>
    public void EnableHooks()
    {
        _focusHook.Enable();
        _focusHook.EnableOrActivate();
    }

    /// <summary>