private TicketItem GetFirstPriorityItem(ICasher cachier) { foreach (var pref in cachier.Prefixes) { if (pref == "All") { //Поиск превого билета который не попадает под исключения if (cachier.PrefixesExclude != null && cachier.PrefixesExclude.Any()) { foreach (var item in Queue) { if (!cachier.PrefixesExclude.Contains(item.Prefix)) { return(item); } } return(null); } //Список исключенгий пуст, вернем первый элемент return(Queue.FirstOrDefault()); } //var priorityItem = Queue.FirstOrDefault(q => q.Prefix == pref); var priorityItem = Queue.FirstOrDefault(q => q.Prefix == pref); if (priorityItem != null) { return(priorityItem); } } return(null); }
private Dispencer(IDisplay display, ISlotSelector slotSelector, ICasher casher) { this.display = display; this.slotSelector = slotSelector; this.casher = casher; slotSelector.SlotSelected += SlotSelected; }
/// <summary> /// Показать первый элемент из очереди, по совпадению с элементами cachier.prefixes /// </summary> public TicketItem PeekByPriority(ICasher cachier) { lock (_locker) { var priorityItem = GetFirstPriorityItem(cachier); return(priorityItem); } }
/// <summary> /// Извлечь первый элемент из очереди, по совпадению с элементами cachier.prefixes /// </summary> public TicketItem DequeueByPriority(ICasher cachier) { lock (_locker) { var priorityItem = GetFirstPriorityItem(cachier); if (priorityItem != null) { var items = new List <TicketItem>(Queue); items.Remove(priorityItem); Queue = new ConcurrentQueue <TicketItem>(items); OnPropertyChanged("QueuePriority"); return(priorityItem); } return(null); } }