Esempio n. 1
0
        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);
        }
Esempio n. 3
0
		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);
		}