コード例 #1
0
        protected virtual void Dispose(bool disposing)
        {
            int dataREquestQueuesCount = _dataRequestQueues.Count;

            for (int i = 0; i < dataREquestQueuesCount; i++)
            {
                DataRequestQueue queue = (DataRequestQueue)_dataRequestQueues[i];
                queue.Dispose();
            }

            _dataRequestQueues.Clear();
        }
コード例 #2
0
        /// <summary>
        /// Returns the oldest item from the queue (but leaves the item in the queue)
        /// </summary>
        /// <param name="targetAddress"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool Peek(UInt16 targetAddress, out DataRequestItem item)
        {
            DataRequestQueue queue = GetDataRequestQueue(targetAddress);
            Object           o;

            item = null;
            if (queue.Peek(out o))
            {
                if (!(o is DataRequestItem))
                {
                    throw new ArgumentException("Bad object type peeked");
                }
                item = o as DataRequestItem;
                return(true);
            }

            return(false);
        }
コード例 #3
0
        /// <summary>
        /// Get request queue associated to targetAddress
        /// </summary>
        /// <param name="targetAddress"></param>
        /// <returns>new DataRequestQueue if not yet present, existing queue otherwise</returns>
        private DataRequestQueue GetDataRequestQueue(UInt16 targetAddress)
        {
            lock (_dataRequestQueues)
            {
                int dataREquestQueuesCount = _dataRequestQueues.Count;
                for (int i = 0; i < dataREquestQueuesCount; i++)
                {
                    DataRequestQueue queue = (DataRequestQueue)_dataRequestQueues[i];
                    if (queue.TargetAddress == targetAddress)
                    {
                        return(queue);
                    }
                }

                // did not find a corresponding queue. Create a new one.
                DataRequestQueue newQueue = new DataRequestQueue(_queueSize, _queueChangedEvent, targetAddress);
                _dataRequestQueues.Add((Object)newQueue);
                return(newQueue);
            }
        }
コード例 #4
0
        /// <summary>
        /// Get request queue associated to targetAddress
        /// </summary>
        /// <param name="targetAddress"></param>
        /// <returns>new DataRequestQueue if not yet present, existing queue otherwise</returns>
        private DataRequestQueue GetDataRequestQueue(UInt16 targetAddress)
        {
            lock (_dataRequestQueues)
            {
                int dataREquestQueuesCount = _dataRequestQueues.Count;
                for (int i = 0; i < dataREquestQueuesCount; i++)
                {
                    DataRequestQueue queue = (DataRequestQueue)_dataRequestQueues[i];
                    if (queue.TargetAddress == targetAddress) { return queue; }
                }

                // did not find a corresponding queue. Create a new one.
                DataRequestQueue newQueue = new DataRequestQueue(_queueSize, _queueChangedEvent, targetAddress);
                _dataRequestQueues.Add((Object)newQueue);
                return newQueue;
            }
        }
コード例 #5
0
        /// <summary>
        /// Add item to the appropriate queue
        /// </summary>
        /// <returns>True on success</returns>
        public bool Add(DataRequestItem item)
        {
            DataRequestQueue queue = GetDataRequestQueue(item.TargetShortAddr);

            return(queue.Add(item));
        }