diff --git a/Cafe.Matcha/Network/NetworkMonitor.cs b/Cafe.Matcha/Network/NetworkMonitor.cs index 541ded5..7a73db1 100644 --- a/Cafe.Matcha/Network/NetworkMonitor.cs +++ b/Cafe.Matcha/Network/NetworkMonitor.cs @@ -21,7 +21,6 @@ internal interface INetworkMonitor internal class NetworkMonitor : INetworkMonitor { - private uint marketQueryItemId = 0; public void HandleMessageReceived(string connection, long epoch, byte[] message) { @@ -524,42 +523,10 @@ private bool HandleMessageByOpcode(Packet packet) } else if (opcode == MatchaOpcode.MarketBoardItemListingCount) { - if (packet.DataLength != 8) - { - return false; - } - - var status = BitConverter.ToUInt32(data, 0); - var count = BitConverter.ToUInt32(data, 4); - var itemId = marketQueryItemId; - - if (status == 0 && itemId != 0) // OK - { - ThreadPool.QueueUserWorkItem(o => Universalis.Client.QueryItem(State.Instance.WorldId, itemId, FireEvent)); - FireEvent(new MarketBoardItemListingCountDTO() - { - Item = (int)itemId, - Count = (int)count, - World = State.Instance.WorldId - }); - } - - marketQueryItemId = 0; return true; } else if (opcode == MatchaOpcode.MarketBoardRequestItemListingInfo) { - if (packet.DataLength != 8) - { - return false; - } - - var itemId = BitConverter.ToUInt32(data, 0); - if (itemId != 0) - { - marketQueryItemId = itemId; - } - return true; } else if (opcode == MatchaOpcode.MarketBoardItemListing) @@ -587,6 +554,13 @@ private bool HandleMessageByOpcode(Packet packet) if (itemId != 0) { + ThreadPool.QueueUserWorkItem(o => Universalis.Client.QueryItem(State.Instance.WorldId, itemId, FireEvent)); + FireEvent(new MarketBoardItemListingCountDTO + { + Item = (int)itemId, + Count = items.Count, + World = State.Instance.WorldId + }); FireEvent(new MarketBoardItemListingDTO() { Item = (int)itemId, diff --git a/Cafe.Matcha/Network/Universalis/PacketProcessor.cs b/Cafe.Matcha/Network/Universalis/PacketProcessor.cs index 47b5868..2d74d3f 100644 --- a/Cafe.Matcha/Network/Universalis/PacketProcessor.cs +++ b/Cafe.Matcha/Network/Universalis/PacketProcessor.cs @@ -208,7 +208,7 @@ void LogStartObserved(MarketBoardItemRequest request) .And(OnMarketBoardSalesBatch(startObservable)) .And(OnMarketBoardListingsBatch(startObservable)) .Then((request, sales, listings) => (request, sales, listings))) - .Where(ShouldUpload) + .Where(ShouldUpload) .SubscribeOn(ThreadPoolScheduler.Instance) .Subscribe( data => @@ -225,6 +225,12 @@ private void UploadMarketBoardData( ICollection listings) { var catalogId = listings.FirstOrDefault()?.CatalogId ?? 0; + if (catalogId == 0) + { + Log?.Invoke(this, $"Wrong catalogId of Market Board listings received for request: item#{catalogId}"); + return; + } + if (listings.Count != request.AmountToArrive) { Log?.Invoke(this, $"Wrong number of Market Board listings received for request: {listings.Count} != {request.AmountToArrive} item#{catalogId}");