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