Example #1
0
        public async Task Handle(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            log.Trace("MessageType: '{0}'", message.MessageType.ToString());

            var     unwrapper = new MessageUnwrapper(message);
            Request request   = unwrapper.GetRequest();

            RequestHandler handler       = null;
            ErrorResponse  errorResponse = null;

            try
            {
                var factory = new RequestHandlerFactory(containerManager, jobManager, message.MessageType, request);
                handler = factory.GetHandler();
            }
            catch (Exception ex)
            {
                log.ErrorException(ex);
                errorResponse = new ErrorResponse {
                    Message = ex.Message
                };
            }

            if (errorResponse != null)
            {
                await messageWriter.WriteAsync(errorResponse);

                return;
            }

            try
            {
                var streamingHandler = handler as IStreamingHandler;
                if (streamingHandler != null)
                {
                    Response finalResponse = await streamingHandler.HandleAsync(messageWriter, cancellationToken);

                    if (finalResponse == null)
                    {
                        string errorMessage = String.Format("Null final response from streaming handler '{0}'", streamingHandler.GetType());
                        log.Error(errorMessage);
                        finalResponse = new ErrorResponse {
                            Message = errorMessage
                        };
                    }
                    await messageWriter.WriteAsync(finalResponse);

                    return;
                }
                else
                {
                    Response response = await handler.HandleAsync();

                    await messageWriter.WriteAsync(response);
                }
            }
            catch (Exception ex)
            {
                if (ex is WardenException)
                {
                    throw;
                }
                else
                {
                    throw new WardenException(String.Format("Exception in request handler '{0}'", handler.ToString()), ex);
                }
            }
            log.Trace("Finished handling message: '{0}'", message.MessageType.ToString());
        }
        public async Task Handle(Message message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            log.Trace("MessageType: '{0}'", message.MessageType.ToString());

            var unwrapper = new MessageUnwrapper(message);
            Request request = unwrapper.GetRequest();

            RequestHandler handler = null;
            ErrorResponse errorResponse = null;
            try
            {
                var factory = new RequestHandlerFactory(containerManager, jobManager, message.MessageType, request);
                handler = factory.GetHandler();
            }
            catch (Exception ex)
            {
                log.ErrorException(ex);
                errorResponse = new ErrorResponse { Message = ex.Message };
            }

            if (errorResponse != null)
            {
                await messageWriter.WriteAsync(errorResponse);
                return;
            }

            try
            {
                var streamingHandler = handler as IStreamingHandler;
                if (streamingHandler != null)
                {
                    Response finalResponse = await streamingHandler.HandleAsync(messageWriter, cancellationToken);
                    if (finalResponse == null)
                    {
                        string errorMessage = String.Format("Null final response from streaming handler '{0}'", streamingHandler.GetType());
                        log.Error(errorMessage);
                        finalResponse = new ErrorResponse { Message = errorMessage };
                    }
                    await messageWriter.WriteAsync(finalResponse);
                    return;
                }
                else
                {
                    Response response = await handler.HandleAsync();
                    await messageWriter.WriteAsync(response);
                }
            }
            catch (Exception ex)
            {
                if (ex is WardenException)
                {
                    throw;
                }
                else
                {
                    throw new WardenException(String.Format("Exception in request handler '{0}'", handler.ToString()), ex);
                }
            }
            log.Trace("Finished handling message: '{0}'", message.MessageType.ToString());
        }