mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-13 20:24:16 +01:00
Merge pull request #1121 from karashiiro/fix/rx-net-performance
fix(network): use Observable.Create instead of Subject
This commit is contained in:
commit
047a06a232
1 changed files with 23 additions and 19 deletions
|
|
@ -27,7 +27,7 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
||||||
{
|
{
|
||||||
private readonly IMarketBoardUploader uploader;
|
private readonly IMarketBoardUploader uploader;
|
||||||
|
|
||||||
private readonly ISubject<NetworkMessage> messages;
|
private readonly IObservable<NetworkMessage> messages;
|
||||||
|
|
||||||
private readonly IDisposable handleMarketBoardItemRequest;
|
private readonly IDisposable handleMarketBoardItemRequest;
|
||||||
private readonly IDisposable handleMarketTaxRates;
|
private readonly IDisposable handleMarketTaxRates;
|
||||||
|
|
@ -45,14 +45,33 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
||||||
this.uploader = new UniversalisMarketBoardUploader();
|
this.uploader = new UniversalisMarketBoardUploader();
|
||||||
this.CfPop = (_, _) => { };
|
this.CfPop = (_, _) => { };
|
||||||
|
|
||||||
this.messages = new Subject<NetworkMessage>();
|
this.messages = Observable.Create<NetworkMessage>(observer =>
|
||||||
|
{
|
||||||
|
void Observe(IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction)
|
||||||
|
{
|
||||||
|
var dataManager = Service<DataManager>.GetNullable();
|
||||||
|
observer.OnNext(new NetworkMessage
|
||||||
|
{
|
||||||
|
DataManager = dataManager,
|
||||||
|
Data = dataPtr,
|
||||||
|
Opcode = opCode,
|
||||||
|
SourceActorId = sourceActorId,
|
||||||
|
TargetActorId = targetActorId,
|
||||||
|
Direction = direction,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
gameNetwork.NetworkMessage += Observe;
|
||||||
|
return () =>
|
||||||
|
{
|
||||||
|
gameNetwork.NetworkMessage -= Observe;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
this.handleMarketBoardItemRequest = this.HandleMarketBoardItemRequest();
|
this.handleMarketBoardItemRequest = this.HandleMarketBoardItemRequest();
|
||||||
this.handleMarketTaxRates = this.HandleMarketTaxRates();
|
this.handleMarketTaxRates = this.HandleMarketTaxRates();
|
||||||
this.handleMarketBoardPurchaseHandler = this.HandleMarketBoardPurchaseHandler();
|
this.handleMarketBoardPurchaseHandler = this.HandleMarketBoardPurchaseHandler();
|
||||||
this.handleCfPop = this.HandleCfPop();
|
this.handleCfPop = this.HandleCfPop();
|
||||||
|
|
||||||
gameNetwork.NetworkMessage += this.ObserveNetworkMessage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -84,21 +103,6 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
||||||
this.handleCfPop.Dispose();
|
this.handleCfPop.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ObserveNetworkMessage(
|
|
||||||
IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction)
|
|
||||||
{
|
|
||||||
var dataManager = Service<DataManager>.GetNullable();
|
|
||||||
this.messages.OnNext(new NetworkMessage
|
|
||||||
{
|
|
||||||
DataManager = dataManager,
|
|
||||||
Data = dataPtr,
|
|
||||||
Opcode = opCode,
|
|
||||||
SourceActorId = sourceActorId,
|
|
||||||
TargetActorId = targetActorId,
|
|
||||||
Direction = direction,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private IObservable<NetworkMessage> OnNetworkMessage()
|
private IObservable<NetworkMessage> OnNetworkMessage()
|
||||||
{
|
{
|
||||||
return this.messages.Where(message => message.DataManager?.IsDataReady == true);
|
return this.messages.Where(message => message.DataManager?.IsDataReady == true);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue