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