Exemplo n.º 1
0
        /// <summary>
        /// Reads a <see cref="PeerTradeInfoServerMessage.UpdateSlot"/>.
        /// </summary>
        /// <param name="reader">The <see cref="BitStream"/> containing the data to read.</param>
        void ReadUpdateSlot(BitStream reader)
        {
            var isSourceSide = reader.ReadBool();
            var slot         = reader.ReadInventorySlot();
            var isSlotEmpty  = reader.ReadBool();
            var itemInfo     = isSlotEmpty ? null : ReadItemInfo(reader);

            var slots = GetSlots(isSourceSide);

            // Validate the slot value
            if (slot < 0 || slot >= slots.Length)
            {
                const string errmsg = "Received slot value `{0}` is out of range.";
                if (log.IsErrorEnabled)
                {
                    log.ErrorFormat(errmsg, slot);
                }
                Debug.Fail(string.Format(errmsg, slot));
                return;
            }

            // Set the item info
            slots[(int)slot] = itemInfo;

            OnSlotUpdated(slot, isSourceSide);
            if (SlotUpdated != null)
            {
                SlotUpdated.Raise(this, new ClientPeerTradeInfoHandlerSlotUpdatedEventArgs(slot, isSourceSide));
            }
        }