public void TestDequeueNoWait()
        {
            MessageDispatchChannel channel = new MessageDispatchChannel();

            MessageDispatch dispatch1 = new MessageDispatch();
            MessageDispatch dispatch2 = new MessageDispatch();
            MessageDispatch dispatch3 = new MessageDispatch();

            Assert.IsTrue(channel.Running == false);
            Assert.IsTrue(channel.DequeueNoWait() == null);

            channel.Enqueue(dispatch1);
            channel.Enqueue(dispatch2);
            channel.Enqueue(dispatch3);

            Assert.IsTrue(channel.DequeueNoWait() == null);
            channel.Start();
            Assert.IsTrue(channel.Running == true);

            Assert.IsTrue(channel.Empty == false);
            Assert.IsTrue(channel.Count == 3);
            Assert.IsTrue(channel.DequeueNoWait() == dispatch1);
            Assert.IsTrue(channel.DequeueNoWait() == dispatch2);
            Assert.IsTrue(channel.DequeueNoWait() == dispatch3);

            Assert.IsTrue(channel.Count == 0);
            Assert.IsTrue(channel.Empty == true);
        }
        public void TestPeek()
        {
            MessageDispatchChannel channel   = new MessageDispatchChannel();
            MessageDispatch        dispatch1 = new MessageDispatch();
            MessageDispatch        dispatch2 = new MessageDispatch();

            Assert.IsTrue(channel.Empty == true);
            Assert.IsTrue(channel.Count == 0);

            channel.EnqueueFirst(dispatch1);

            Assert.IsTrue(channel.Empty == false);
            Assert.IsTrue(channel.Count == 1);

            channel.EnqueueFirst(dispatch2);

            Assert.IsTrue(channel.Empty == false);
            Assert.IsTrue(channel.Count == 2);

            Assert.IsTrue(channel.Peek() == null);

            channel.Start();

            Assert.IsTrue(channel.Peek() == dispatch2);
            Assert.IsTrue(channel.DequeueNoWait() == dispatch2);
            Assert.IsTrue(channel.Peek() == dispatch1);
            Assert.IsTrue(channel.DequeueNoWait() == dispatch1);
        }
示例#3
0
        public Boolean Iterate()
        {
            try
            {
                lock (_consumers.SyncRoot)
                    if (_consumers.Values.Cast <MessageConsumer>()
                        .Any(consumer => consumer.Iterate()))
                    {
                        return(true);
                    }

                // No messages left queued on the listeners.. so now dispatch messages
                // queued on the session
                var message = _messageQueue.DequeueNoWait();

                if (message == null)
                {
                    return(false);
                }

                Dispatch(message);
                return(_messageQueue.HasMessages);
            }
            catch (Exception ex)
            {
                Tracer.WarnFormat("Caught Exception While Dispatching: {0}", ex.Message);
                _session.Connection.OnSessionException(_session, ex);
            }

            return(true);
        }
示例#4
0
        public Boolean Iterate()
        {
            if (_listener == null)
            {
                return(false);
            }

            var dispatch = _unconsumedMessages.DequeueNoWait();

            if (dispatch == null)
            {
                return(false);
            }

            try
            {
                var message = CreateStompMessage(dispatch);
                BeforeMessageIsConsumed(dispatch);

                // ReSharper disable once PossibleNullReferenceException
                _listener(message);
                AfterMessageIsConsumed(dispatch, false);
            }
            catch (StompException ex)
            {
                _session.Connection.OnSessionException(_session, ex);
            }

            return(true);
        }
示例#5
0
        public Boolean Iterate()
        {
            try
            {
                if (_consumers.Any(consumer => consumer.Value.Iterate()))
                {
                    return(true);
                }

                // No messages left queued on the listeners.. so now dispatch messages
                // queued on the session
                var message = _messageQueue.DequeueNoWait();

                if (message == null)
                {
                    return(false);
                }

                Dispatch(message);
                return(_messageQueue.HasMessages);
            }
            catch (Exception ex)
            {
                Tracer.Warn($"Caught Exception While Dispatching: {ex}");
                _session.Connection.OnSessionException(_session, ex);
            }

            return(true);
        }
示例#6
0
        public bool Iterate()
        {
            try
            {
                lock (this.consumers.SyncRoot)
                {
                    // Deliver any messages queued on the consumer to their listeners.
                    foreach (MessageConsumer consumer in this.consumers.Values)
                    {
                        if (consumer.Iterate())
                        {
                            return(true);
                        }
                    }
                }

                // No messages left queued on the listeners.. so now dispatch messages
                // queued on the session
                MessageDispatch message = messageQueue.DequeueNoWait();

                if (message != null)
                {
                    this.Dispatch(message);
                    return(!messageQueue.Empty);
                }

                return(false);
            }
            catch (Exception ex)
            {
                Tracer.DebugFormat("Caught Exception While Dispatching: {0}", ex.Message);
                this.session.Connection.OnSessionException(this.session, ex);
            }

            return(true);
        }