Exemplo n.º 1
0
        /// <summary>
        /// Invoke the handler pipeline and process the passed message.
        /// </summary>
        /// <param name="context">The agent context.</param>
        /// <param name="messageContext">The message context.</param>
        /// <returns></returns>
        /// <exception cref="Exception">Expected inner message to be of type 'ForwardMessage'</exception>
        /// <exception cref="AgentFrameworkException">Couldn't locate a message handler for type {messageType}</exception>
        /// TODO should recieve a message context and return a message context.
        public async Task <MessageResponse> ProcessAsync(IAgentContext context, MessageContext messageContext)
        {
            EnsureConfigured();

            var agentContext = context.AsAgentContext();

            agentContext.AddNext(messageContext);

            MessageContext outgoingMessageContext = null;

            while (agentContext.TryGetNext(out var message) && outgoingMessageContext == null)
            {
                outgoingMessageContext = await ProcessMessage(agentContext, message);
            }

            var response = new MessageResponse();

            response.Write(outgoingMessageContext?.Payload);

            return(response);
        }