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);
        }
Exemple #2
0
        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);
     }
 }