Implement service locator

This commit is contained in:
Raymond 2021-08-20 11:59:35 -04:00
parent 06b1163a52
commit ff1d7f2829
101 changed files with 1614 additions and 1436 deletions

View file

@ -5,6 +5,9 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Dalamud.Configuration.Internal;
using Dalamud.Data;
using Dalamud.Game.Gui;
using Dalamud.Game.Network.Internal.MarketBoardUploaders;
using Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis;
using Dalamud.Game.Network.Structures;
@ -18,8 +21,6 @@ namespace Dalamud.Game.Network.Internal
/// </summary>
internal class NetworkHandlers
{
private readonly Dalamud dalamud;
private readonly List<MarketBoardItemRequest> marketBoardRequests = new();
private readonly bool optOutMbUploads;
@ -30,16 +31,13 @@ namespace Dalamud.Game.Network.Internal
/// <summary>
/// Initializes a new instance of the <see cref="NetworkHandlers"/> class.
/// </summary>
/// <param name="dalamud">The Dalamud instance.</param>
/// <param name="optOutMbUploads">Whether the client should opt out of market board uploads.</param>
public NetworkHandlers(Dalamud dalamud, bool optOutMbUploads)
public NetworkHandlers()
{
this.dalamud = dalamud;
this.optOutMbUploads = optOutMbUploads;
this.optOutMbUploads = Service<DalamudStartInfo>.Get().OptOutMbCollection;
this.uploader = new UniversalisMarketBoardUploader(dalamud);
this.uploader = new UniversalisMarketBoardUploader();
dalamud.Framework.Network.OnNetworkMessage += this.OnNetworkMessage;
Service<GameNetwork>.Get().OnNetworkMessage += this.OnNetworkMessage;
}
/// <summary>
@ -49,14 +47,18 @@ namespace Dalamud.Game.Network.Internal
private void OnNetworkMessage(IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction)
{
if (!this.dalamud.Data.IsDataReady)
var dataManager = Service<DataManager>.GetNullable();
if (dataManager?.IsDataReady == false)
return;
var configuration = Service<DalamudConfiguration>.Get();
if (direction == NetworkMessageDirection.ZoneUp)
{
if (!this.optOutMbUploads)
{
if (opCode == this.dalamud.Data.ClientOpCodes["MarketBoardPurchaseHandler"])
if (opCode == Service<DataManager>.Get().ClientOpCodes["MarketBoardPurchaseHandler"])
{
this.marketBoardPurchaseHandler = MarketBoardPurchaseHandler.Read(dataPtr);
}
@ -65,7 +67,7 @@ namespace Dalamud.Game.Network.Internal
return;
}
if (opCode == this.dalamud.Data.ServerOpCodes["CfNotifyPop"])
if (opCode == dataManager.ServerOpCodes["CfNotifyPop"])
{
var data = new byte[64];
Marshal.Copy(dataPtr, data, 0, 64);
@ -76,7 +78,7 @@ namespace Dalamud.Game.Network.Internal
if (notifyType != 3)
return;
var contentFinderCondition = this.dalamud.Data.GetExcelSheet<ContentFinderCondition>().GetRow(contentFinderConditionId);
var contentFinderCondition = dataManager.GetExcelSheet<ContentFinderCondition>().GetRow(contentFinderConditionId);
if (contentFinderCondition == null)
{
@ -91,7 +93,7 @@ namespace Dalamud.Game.Network.Internal
contentFinderCondition.Image = 112324;
}
if (this.dalamud.Configuration.DutyFinderTaskbarFlash && !NativeFunctions.ApplicationIsActivated())
if (configuration.DutyFinderTaskbarFlash && !NativeFunctions.ApplicationIsActivated())
{
var flashInfo = new NativeFunctions.FlashWindowInfo
{
@ -106,8 +108,10 @@ namespace Dalamud.Game.Network.Internal
Task.Run(() =>
{
if (this.dalamud.Configuration.DutyFinderChatMessage)
this.dalamud.Framework.Gui.Chat.Print("Duty pop: " + cfcName);
if (configuration.DutyFinderChatMessage)
{
Service<ChatGui>.Get().Print("Duty pop: " + cfcName);
}
this.CfPop?.Invoke(this, contentFinderCondition);
});
@ -117,7 +121,7 @@ namespace Dalamud.Game.Network.Internal
if (!this.optOutMbUploads)
{
if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardItemRequestStart"])
if (opCode == dataManager.ServerOpCodes["MarketBoardItemRequestStart"])
{
var catalogId = (uint)Marshal.ReadInt32(dataPtr);
var amount = Marshal.ReadByte(dataPtr + 0xB);
@ -134,7 +138,7 @@ namespace Dalamud.Game.Network.Internal
return;
}
if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardOfferings"])
if (opCode == dataManager.ServerOpCodes["MarketBoardOfferings"])
{
var listing = MarketBoardCurrentOfferings.Read(dataPtr);
@ -200,7 +204,7 @@ namespace Dalamud.Game.Network.Internal
return;
}
if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardHistory"])
if (opCode == dataManager.ServerOpCodes["MarketBoardHistory"])
{
var listing = MarketBoardHistory.Read(dataPtr);
@ -237,7 +241,7 @@ namespace Dalamud.Game.Network.Internal
}
}
if (opCode == this.dalamud.Data.ServerOpCodes["MarketTaxRates"])
if (opCode == dataManager.ServerOpCodes["MarketTaxRates"])
{
var category = (uint)Marshal.ReadInt32(dataPtr);
@ -267,7 +271,7 @@ namespace Dalamud.Game.Network.Internal
}
}
if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardPurchase"])
if (opCode == dataManager.ServerOpCodes["MarketBoardPurchase"])
{
if (this.marketBoardPurchaseHandler == null)
return;