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

@ -2,8 +2,9 @@ using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Dalamud.Game.Network;
using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.IoC.Internal;
using Serilog;
namespace Dalamud.Game.Network
@ -11,6 +12,8 @@ namespace Dalamud.Game.Network
/// <summary>
/// This class handles interacting with game network events.
/// </summary>
[PluginInterface]
[InterfaceVersion("1.0")]
public sealed class GameNetwork : IDisposable
{
private readonly GameNetworkAddressResolver address;
@ -23,11 +26,10 @@ namespace Dalamud.Game.Network
/// <summary>
/// Initializes a new instance of the <see cref="GameNetwork"/> class.
/// </summary>
/// <param name="scanner">The SigScanner instance.</param>
public GameNetwork(SigScanner scanner)
internal GameNetwork()
{
this.address = new GameNetworkAddressResolver();
this.address.Setup(scanner);
this.address.Setup();
Log.Verbose("===== G A M E N E T W O R K =====");
Log.Verbose($"ProcessZonePacketDown address 0x{this.address.ProcessZonePacketDown.ToInt64():X}");
@ -79,8 +81,7 @@ namespace Dalamud.Game.Network
/// <summary>
/// Process a chat queue.
/// </summary>
/// <param name="framework">The Framework instance.</param>
public void UpdateQueue(Framework framework)
internal void UpdateQueue()
{
while (this.zoneInjectQueue.Count > 0)
{

View file

@ -21,30 +21,27 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis
private const string ApiKey = "GGD6RdSfGyRiHM5WDnAo0Nj9Nv7aC5NDhMj3BebT";
private readonly Dalamud dalamud;
/// <summary>
/// Initializes a new instance of the <see cref="UniversalisMarketBoardUploader"/> class.
/// </summary>
/// <param name="dalamud">The Dalamud instance.</param>
public UniversalisMarketBoardUploader(Dalamud dalamud)
public UniversalisMarketBoardUploader()
{
this.dalamud = dalamud;
}
/// <inheritdoc/>
public void Upload(MarketBoardItemRequest request)
{
var clientState = Service<ClientState.ClientState>.Get();
using var client = new HttpClient();
Log.Verbose("Starting Universalis upload.");
var uploader = this.dalamud.ClientState.LocalContentId;
var uploader = clientState.LocalContentId;
// ====================================================================================
var listingsUploadObject = new UniversalisItemListingsUploadRequest
{
WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
WorldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0,
UploaderId = uploader.ToString(),
ItemId = request.CatalogId,
Listings = new List<UniversalisItemListingsEntry>(),
@ -89,7 +86,7 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis
var historyUploadObject = new UniversalisHistoryUploadRequest
{
WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
WorldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0,
UploaderId = uploader.ToString(),
ItemId = request.CatalogId,
Entries = new List<UniversalisHistoryEntry>(),
@ -121,14 +118,15 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis
/// <inheritdoc/>
public void UploadTax(MarketTaxRates taxRates)
{
var clientState = Service<ClientState.ClientState>.Get();
using var client = new HttpClient();
// ====================================================================================
var taxUploadObject = new UniversalisTaxUploadRequest
{
WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
WorldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0,
UploaderId = clientState.LocalContentId.ToString(),
TaxData = new UniversalisTaxData
{
LimsaLominsa = taxRates.LimsaLominsaTax,
@ -159,12 +157,13 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis
/// </remarks>
public void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler)
{
var clientState = Service<ClientState.ClientState>.Get();
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(ApiKey);
var itemId = purchaseHandler.CatalogId;
var worldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
var worldId = clientState.LocalPlayer?.CurrentWorld.Id ?? 0;
// ====================================================================================
@ -174,7 +173,7 @@ namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis
Quantity = purchaseHandler.ItemQuantity,
ListingId = purchaseHandler.ListingId.ToString(),
RetainerId = purchaseHandler.RetainerId.ToString(),
UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
UploaderId = clientState.LocalContentId.ToString(),
};
var deletePath = $"/api/{worldId}/{itemId}/delete";

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;