Exemplo n.º 1
0
        /// <summary>
        /// Enqueue Message
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public virtual void Enqueue(Ptr ptr, Priority pririty)
        {
            using (TransactionScope tran = new TransactionScope())
            {
                switch (pririty)
                {
                case Priority.High:
                    highQ.Enqueue(ptr);
                    break;

                case Priority.Medium:
                    mediumQ.Enqueue(ptr);
                    break;

                default:
                    normalQ.Enqueue(ptr);
                    break;
                }

                if (MessageArrived != null)
                {
                    OnMessageArrived(new QueueItemEventArgs(item, MessageState.Arrived));
                }
            }
        }
Exemplo n.º 2
0
        //private IQueueItem GetFirstItem()
        //{
        //    IQueueItem item = null;
        //    try
        //    {
        //        if (Count() > 0)
        //        {

        //            foreach (object o in QueueList.Keys)
        //            {
        //                item = Dequeue((Guid)o);
        //                if (item != null)
        //                {
        //                    break;
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        Console.WriteLine(ex.Message);
        //    }
        //    return item;
        //}


        /// <summary>
        /// Enqueue Message
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public virtual IQueueAck Enqueue(IQueueItem item)
        {
            //using (TransactionScope tran = new TransactionScope())
            //{
            //((QueueItem)item).SetState(MessageState.Arrived);
            //((QueueItem)item).ArrivedTime = DateTime.Now;

            Ptr ptr = ((QueueItem)item).SetArrived(Host);

            //Ptr ptr = new Ptr(item, Host);

            if (TryAdd(ptr, item))
            {
                switch (item.Priority)
                {
                case Priority.High:
                    highQ.Enqueue(ptr);
                    break;

                case Priority.Medium:
                    mediumQ.Enqueue(ptr);
                    break;

                default:
                    normalQ.Enqueue(ptr);
                    break;
                }
                //tran.Complete();
                if (MessageArrived != null)
                {
                    OnMessageArrived(new QueueItemEventArgs(item, MessageState.Arrived));
                }
                return(new QueueAck(MessageState.Arrived, item));  // new Ptr(ptr, PtrState.Arrived);
            }

            //}
            //Thread.Sleep(ThreadWait);
            return(new QueueAck(MessageState.None, item));// ptr;
        }