mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
fix(network): use Observable.Create instead of Subject
http://introtorx.com/Content/v1.0.10621.0/04_CreatingObservableSequences.html
This commit is contained in:
parent
268ddfbea0
commit
90fda3a81b
1 changed files with 23 additions and 19 deletions
|
|
@ -27,7 +27,7 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
|||
{
|
||||
private readonly IMarketBoardUploader uploader;
|
||||
|
||||
private readonly ISubject<NetworkMessage> messages;
|
||||
private readonly IObservable<NetworkMessage> messages;
|
||||
|
||||
private readonly IDisposable handleMarketBoardItemRequest;
|
||||
private readonly IDisposable handleMarketTaxRates;
|
||||
|
|
@ -45,14 +45,33 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
|||
this.uploader = new UniversalisMarketBoardUploader();
|
||||
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.handleMarketTaxRates = this.HandleMarketTaxRates();
|
||||
this.handleMarketBoardPurchaseHandler = this.HandleMarketBoardPurchaseHandler();
|
||||
this.handleCfPop = this.HandleCfPop();
|
||||
|
||||
gameNetwork.NetworkMessage += this.ObserveNetworkMessage;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -84,21 +103,6 @@ internal class NetworkHandlers : IDisposable, IServiceType
|
|||
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()
|
||||
{
|
||||
return this.messages.Where(message => message.DataManager?.IsDataReady == true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue