예제 #1
0
        /// <summary>
        /// Пытается обработать сообщение как запрос.
        /// </summary>
        /// <param name="delivery">
        /// Входящее сообщение.
        /// </param>
        /// <returns>
        /// Если <c>true</c> - тогда сообщение обработано как запрос, иначе - <c>false</c>.
        /// </returns>
        private bool TryHandleAsResponse(RabbitDelivery delivery)
        {
            if (!delivery.IsResponse)
            {
                return(false);
            }

            string correlationId = delivery.CorrelationId;

            lock (this.locker)
            {
                if (this.expectations.ContainsKey(correlationId))
                {
                    Expectation e = this.expectations[correlationId];

                    if (e.TimeoutTicket.HasValue)
                    {
                        this.ticketTimer.Cancel(e.TimeoutTicket.Value);
                    }

                    this.expectations.Remove(correlationId);
                    e.Complete(delivery);
                    return(true);
                }
            }

            return(false);
        }