diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs index 7d9abab83..2cb49ed6f 100644 --- a/Dalamud/Dalamud.cs +++ b/Dalamud/Dalamud.cs @@ -85,10 +85,12 @@ namespace Dalamud { // Initialize game subsystem this.Framework = new Framework(this.SigScanner, this); - this.ClientState = new ClientState(this, info, this.SigScanner); - this.WinSock2 = new WinSockHandlers(); + NetworkHandlers = new NetworkHandlers(this, this.Configuration.OptOutMbCollection); + + this.ClientState = new ClientState(this, info, this.SigScanner); + Task.Run(async () => { try { var res = await AssetManager.EnsureAssets(this.baseDirectory); @@ -139,8 +141,6 @@ namespace Dalamud { SeStringManager = new SeStringManager(Data); - NetworkHandlers = new NetworkHandlers(this, this.Configuration.OptOutMbCollection); - #if DEBUG AntiDebug = new AntiDebug(this.SigScanner); AntiDebug.Enable(); diff --git a/Dalamud/Game/ClientState/ClientState.cs b/Dalamud/Game/ClientState/ClientState.cs index c29e129a9..610c2523d 100644 --- a/Dalamud/Game/ClientState/ClientState.cs +++ b/Dalamud/Game/ClientState/ClientState.cs @@ -16,6 +16,7 @@ namespace Dalamud.Game.ClientState /// This class represents the state of the game client at the time of access. /// public class ClientState : INotifyPropertyChanged, IDisposable { + private readonly Dalamud dalamud; public event PropertyChangedEventHandler PropertyChanged; private ClientStateAddressResolver Address { get; } @@ -60,6 +61,11 @@ namespace Dalamud.Game.ClientState /// public EventHandler TerritoryChanged; + /// + /// Event that gets fired when a duty is ready. + /// + public event EventHandler CfPop; + private IntPtr SetupTerritoryTypeDetour(IntPtr manager, ushort terriType) { this.TerritoryType = terriType; @@ -109,6 +115,7 @@ namespace Dalamud.Game.ClientState /// /// StartInfo of the current Dalamud launch /// Sig scanner public ClientState(Dalamud dalamud, DalamudStartInfo startInfo, SigScanner scanner) { + this.dalamud = dalamud; Address = new ClientStateAddressResolver(); Address.Setup(scanner); @@ -135,6 +142,11 @@ namespace Dalamud.Game.ClientState this); dalamud.Framework.OnUpdateEvent += FrameworkOnOnUpdateEvent; + dalamud.NetworkHandlers.CfPop += NetworkHandlersOnCfPop; + } + + private void NetworkHandlersOnCfPop(object sender, ContentFinderCondition e) { + CfPop?.Invoke(this, e); } public void Enable() { @@ -146,6 +158,9 @@ namespace Dalamud.Game.ClientState this.PartyList.Dispose(); this.setupTerritoryTypeHook.Dispose(); this.Actors.Dispose(); + + this.dalamud.Framework.OnUpdateEvent -= FrameworkOnOnUpdateEvent; + this.dalamud.NetworkHandlers.CfPop += NetworkHandlersOnCfPop; } private bool lastConditionNone = true; diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs index 477a20a4b..28a7f06d8 100644 --- a/Dalamud/Game/Network/NetworkHandlers.cs +++ b/Dalamud/Game/Network/NetworkHandlers.cs @@ -22,8 +22,10 @@ namespace Dalamud.Game.Network { private readonly bool optOutMbUploads; private readonly IMarketBoardUploader uploader; - public delegate Task CfPop(ContentFinderCondition cfc); - public event CfPop ProcessCfPop; + /// + /// Event which gets fired when a duty is ready. + /// + public event EventHandler CfPop; public NetworkHandlers(Dalamud dalamud, bool optOutMbUploads) { this.dalamud = dalamud; @@ -79,11 +81,11 @@ namespace Dalamud.Game.Network { NativeFunctions.FlashWindowEx(ref flashInfo); } - Task.Run(async () => { + Task.Run(() => { if(this.dalamud.Configuration.DutyFinderChatMessage) this.dalamud.Framework.Gui.Chat.Print("Duty pop: " + cfcName); - await this.ProcessCfPop?.Invoke(contentFinderCondition); + CfPop?.Invoke(this, contentFinderCondition); }); return;