internal ResponseTracking(MessageBase message, TimeSpan timeout)
 {
     _timeout = DateTime.Now.Add(timeout);
     _message = message;
     this.Key = new ResponseKey(message.AgentID, message.Sequence);
 }
 internal ResponseTracking(MessageBase message)
     : this(message, CExcessiveWaitTimeout)
 {
 }
 void Returned(IBasicProperties p, MessageBase m)
 {
     var dlg = OnReturned;
     if (dlg != null)
     {
         var args = new ReturnedMessageArgs
         {
             Queue = this.Queue,
             ReplyTo = p.ReplyTo,
             Message = m,
             Topic = this.Topic
         };
         dlg(this, args);
     }
 }
 internal int Ack(MessageBase response)
 {
     var ack = Interlocked.Increment(ref _ack);
     var responses = Util.NonBlockingLazyInitializeVolatile(ref _responses);
     lock (responses)
     {
         responses.Add(response);
     }
     RunCompletionLogic();
     return ack;
 }
 void DispatchMessage(IBasicProperties p, MessageBase m)
 {
     switch (m.Kind)
     {
         case AgentMessageKind.None:
             break;
         case AgentMessageKind.Mailing:
             Mailing(m as MailingMessage);
             break;
         case AgentMessageKind.MailingDelayed:
             DelayedMailing(m as DelayedMailingMessage);
             break;
         case AgentMessageKind.MailingPaused:
             PausedMailing(m as PausedMailingMessage);
             break;
         default:
             break;
     }
 }