diff --git a/Dalamud/Game/Network/GameNetwork.cs b/Dalamud/Game/Network/GameNetwork.cs index 5c21add0f..be464ef34 100644 --- a/Dalamud/Game/Network/GameNetwork.cs +++ b/Dalamud/Game/Network/GameNetwork.cs @@ -17,7 +17,7 @@ namespace Dalamud.Game.Network; /// This class handles interacting with game network events. /// [ServiceManager.EarlyLoadedService] -internal sealed unsafe class GameNetwork : IInternalDisposableService, IGameNetwork +internal sealed unsafe class GameNetwork : IInternalDisposableService { private readonly GameNetworkAddressResolver address; private readonly Hook processZonePacketDownHook; @@ -51,11 +51,23 @@ internal sealed unsafe class GameNetwork : IInternalDisposableService, IGameNetw this.processZonePacketUpHook.Enable(); } + /// + /// The delegate type of a network message event. + /// + /// The pointer to the raw data. + /// The operation ID code. + /// The source actor ID. + /// The taret actor ID. + /// The direction of the packed. + public delegate void OnNetworkMessageDelegate(nint dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction); + [UnmanagedFunctionPointer(CallingConvention.ThisCall)] private delegate byte ProcessZonePacketUpDelegate(IntPtr a1, IntPtr dataPtr, IntPtr a3, byte a4); - /// - public event IGameNetwork.OnNetworkMessageDelegate? NetworkMessage; + /// + /// Event that is called when a network message is sent/received. + /// + public event OnNetworkMessageDelegate? NetworkMessage; /// void IInternalDisposableService.DisposeService() @@ -136,39 +148,3 @@ internal sealed unsafe class GameNetwork : IInternalDisposableService, IGameNetw return this.processZonePacketUpHook.Original(a1, dataPtr, a3, a4); } } - -/// -/// Plugin-scoped version of a AddonLifecycle service. -/// -[PluginInterface] -[ServiceManager.ScopedService] -#pragma warning disable SA1015 -[ResolveVia] -#pragma warning restore SA1015 -internal class GameNetworkPluginScoped : IInternalDisposableService, IGameNetwork -{ - [ServiceManager.ServiceDependency] - private readonly GameNetwork gameNetworkService = Service.Get(); - - /// - /// Initializes a new instance of the class. - /// - internal GameNetworkPluginScoped() - { - this.gameNetworkService.NetworkMessage += this.NetworkMessageForward; - } - - /// - public event IGameNetwork.OnNetworkMessageDelegate? NetworkMessage; - - /// - void IInternalDisposableService.DisposeService() - { - this.gameNetworkService.NetworkMessage -= this.NetworkMessageForward; - - this.NetworkMessage = null; - } - - private void NetworkMessageForward(nint dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction) - => this.NetworkMessage?.Invoke(dataPtr, opCode, sourceActorId, targetActorId, direction); -} diff --git a/Dalamud/Plugin/Services/IGameNetwork.cs b/Dalamud/Plugin/Services/IGameNetwork.cs index eed79b4af..969176da7 100644 --- a/Dalamud/Plugin/Services/IGameNetwork.cs +++ b/Dalamud/Plugin/Services/IGameNetwork.cs @@ -5,6 +5,7 @@ namespace Dalamud.Plugin.Services; /// /// This class handles interacting with game network events. /// +[Obsolete("Will be removed in a future release. Use packet handler hooks instead.", true)] public interface IGameNetwork { // TODO(v9): we shouldn't be passing pointers to the actual data here