mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-01-02 05:43:40 +01:00
Implement service locator
This commit is contained in:
parent
06b1163a52
commit
ff1d7f2829
101 changed files with 1614 additions and 1436 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue