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(); }
/// <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); }
/// <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); } }
/// <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; } }
/// <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)); }