private void _sharedTradeDataProcess(OldPacket pkt, TradeUpdateEvent handler) { if (handler == null) { return; } short player1ID = pkt.GetShort(); List <InventoryItem> player1Items = new List <InventoryItem>(); while (pkt.PeekByte() != 255) { player1Items.Add(new InventoryItem(pkt.GetShort(), pkt.GetInt())); } pkt.Skip(1); short player2ID = pkt.GetShort(); List <InventoryItem> player2Items = new List <InventoryItem>(); while (pkt.PeekByte() != 255) { player2Items.Add(new InventoryItem(pkt.GetShort(), pkt.GetInt())); } pkt.Skip(1); handler(player1ID, player1Items, player2ID, player2Items); }
/// <summary> /// Add or Update a Trade. Ensure the Trade is based upon the correct previous version (it should supply the previous version, that it is updating) /// </summary> /// <param name="t">The new (version of the) trade</param> public void AddUpdateTrade(Trade t) { lock (trades) { //Add or Update? if (trades.ContainsKey(t.Id)) { var history = trades[t.Id]; int latestVersion = history.Select(h => h.Version).Max(); //Check for update collisions if (t.Version != latestVersion) { throw new FaultException <AttemptingToUpdateOldVersionOfTrade>( new AttemptingToUpdateOldVersionOfTrade(t, history.Where(h => h.Version == latestVersion).Single())); } t.Version = latestVersion + 1; if (t.Version > 1 && t.State == State.New) { t.State = State.Amended; } history.Add(t); } else { t.Version = 1; trades.Add(t.Id, new List <Trade>() { t }); } } TradeUpdateEvent?.Invoke(t); }
private void _sharedTradeDataProcess(Packet pkt, TradeUpdateEvent handler) { if (handler == null) return; short player1ID = pkt.GetShort(); List<InventoryItem> player1Items = new List<InventoryItem>(); while (pkt.PeekByte() != 255) { player1Items.Add(new InventoryItem { id = pkt.GetShort(), amount = pkt.GetInt() }); } pkt.Skip(1); short player2ID = pkt.GetShort(); List<InventoryItem> player2Items = new List<InventoryItem>(); while (pkt.PeekByte() != 255) { player2Items.Add(new InventoryItem { id = pkt.GetShort(), amount = pkt.GetInt() }); } pkt.Skip(1); handler(player1ID, player1Items, player2ID, player2Items); }