Exemplo n.º 1
0
        private dynamic GetNthFibonacci()
        {
            FibonacciRequest request = null;

            try
            {
                request = this.Bind <FibonacciRequest>();
            }
            catch (ModelBindingException)
            {
                return(Response.AsJson(new ErrorMessage
                {
                    Message = "Please provide a valid integer"
                }).WithStatusCode(HttpStatusCode.BadRequest));
            }

            long result = 0;

            try
            {
                result = _fibonacciService.GetNth(request.N);
            }
            catch (Exception)
            {
                return(Response.AsJson(new ErrorMessage
                {
                    Message = "Please provide a valid integer"
                }).WithStatusCode(HttpStatusCode.BadRequest));
            }

            return(new TextResponse(result.ToString()));
        }
        public FibonacciRequest GetRequestInstance()
        {
            FibonacciRequest request = FibonacciRequest.Instance;

            request.FirstIndex      = 28;
            request.LastIndex       = 30;
            request.UseCache        = false;
            request.TimeOfExecution = 10000;
            request.AmountMemory    = 30000;
            return(request);
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Post([FromBody] FibonacciRequest request)
        {
            _log.InfoFormat("{0} recieved count {1} value {2}", request.ChainId, request.Count, request.Value);

            _backgroundJobClient.Enqueue <ICommandHandler <EvaluateFibonacciStepCommand> >(h => h.ExecuteAsync(new EvaluateFibonacciStepCommand
            {
                Value   = request.Value,
                Count   = request.Count,
                Source  = EvaluationSource.SecondService,
                ChainId = request.ChainId
            }));

            return(Ok());
        }
        public async Task <IActionResult> GetFibonacci([FromBody] FibonacciRequest request)
        {
            try
            {
                _service.ValidadeRequest(request);

                var result = await _service.Fibonacci(request).ConfigureAwait(false);

                return(Ok(result));
            }
            catch (ArgumentException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Exemplo n.º 5
0
        static void Main(string[] args)
        {
            try
            {
                string data = args.Length > 0 ? args[0] : "Test data from proxy client";

                // Create the client object available from the service reference
                var client = new ExampleServiceClient("appEndpoint");

                // Execute the test method
                Console.WriteLine("Set test data = [{0}]", data);
                Console.WriteLine("Calling TestService() Method...");
                Console.WriteLine(client.TestService(data + Environment.NewLine));

                // Get a number to compute a Fibonacci value
                const string prompt = "Enter an integer (40 or less) to use for calculation: ";
                Console.WriteLine("{0}{1}", Environment.NewLine, prompt);
                int number;
                while (!int.TryParse(Console.ReadLine(), out number) || number > 40)
                {
                    Console.WriteLine("{0}{0}That entry was invalid!{0}{1}", Environment.NewLine, prompt);
                }
                Console.WriteLine("{0}Calculating Fibonacci value of {1}{0}", Environment.NewLine, number);

                // Create a request using the agreed-upon request data contract
                var request = new FibonacciRequest
                {
                    Number = number,
                    UseRecursiveAlgorithm = true
                };

                // Return a result data contract object by calling the operation
                var result = client.Fibonacci(request);
                if (result.Errors != null)
                {
                    Console.WriteLine("The recusrsive calculation resulted in an error: {0}", result.Errors);
                }
                else
                {
                    Console.WriteLine("{0}Using the recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations{0}{0}Press <ENTER> to continue",
                                      Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations);
                }

                Console.ReadLine();

                // Call the operation again
                request.UseRecursiveAlgorithm = false;
                result = client.Fibonacci(request);
                if (result.Errors != null)
                {
                    Console.WriteLine("The non-recusrsive calculation resulted in an error: {0}", result.Errors);
                }
                else
                {
                    Console.WriteLine("Using the non-recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations",
                                      Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations);
                }
            }
            catch (Exception ex)
            {
                HandleException("General", ex);
            }
            finally
            {
                Console.WriteLine("{0}Done! Press any key to exit...", Environment.NewLine);
                // Ensure the console doesn't close until we're done
                Console.ReadKey();
            }
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            try
            {
                string data = args.Length > 0 ? args[0] : "Test data from proxy client";

                // Get the service information from the configuration file
                var settings = (ServiceConfiguration)ConfigurationManager.GetSection("serviceSettings");

                // Here, we create the endpoint using ChannelFactory
                var binding = new BasicHttpBinding();
                if (settings.UseSsl)
                {
                    binding.Security.Mode = BasicHttpSecurityMode.Transport;
                }
                var address = new EndpointAddress(settings.ServiceUrl);
                var factory = new ChannelFactory <IExampleService>(binding, address);
                var channel = factory.CreateChannel();

                // Execute the test method
                Console.WriteLine("Set test data = [{0}]", data);
                Console.WriteLine("Calling TestService() Method...");
                Console.WriteLine(channel.TestService(data));

                // Get a number to compute a Fibonacci value
                const string prompt = "Enter an integer (40 or less) to use for calculation: ";
                Console.WriteLine("{0}{1}", Environment.NewLine, prompt);
                int number;
                while (!int.TryParse(Console.ReadLine(), out number) || number > 40)
                {
                    Console.WriteLine("{0}{0}That entry was invalid!{0}{1}", Environment.NewLine, prompt);
                }
                Console.WriteLine("{0}Calculating Fibonacci value of {1}{0}", Environment.NewLine, number);

                // Create a request using the agreed-upon request data contract
                var request = new FibonacciRequest
                {
                    Number = number,
                    UseRecursiveAlgorithm = true
                };

                // Return a result data contract object by calling the operation
                var result = channel.Fibonacci(request);
                if (result.Errors != null)
                {
                    Console.WriteLine("The recusrsive calculation resulted in an error: {0}", result.Errors);
                }
                else
                {
                    Console.WriteLine("{0}Using the recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations{0}{0}Press <ENTER> to continue",
                                      Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations);
                }

                Console.ReadLine();

                // Call the operation again
                request.UseRecursiveAlgorithm = false;
                result = channel.Fibonacci(request);
                if (result.Errors != null)
                {
                    Console.WriteLine("The non-recusrsive calculation resulted in an error: {0}", result.Errors);
                }
                else
                {
                    Console.WriteLine("Using the non-recursive formula: {1}{0}Calculated that f({2}) = {3}{0}In {4} iterations",
                                      Environment.NewLine, result.Data.Formula, number, result.Data.Value, result.Data.Iterations);
                }

                // Close the endpoint
                factory.Close();
            }
            catch (Exception ex)
            {
                HandleException("General", ex);
            }
            finally
            {
                Console.WriteLine("{0}Done! Press any key to exit...", Environment.NewLine);
                // Ensure the console doesn't close until we're done
                Console.ReadKey();
            }
        }
        public async Task <BaseResponse> Fibonacci(FibonacciRequest request)
        {
            watch.Restart();
            BaseResponse  response      = BaseResponse.Instance;
            ErrorResponse errorResponse = ErrorResponse.Instance;

            try
            {
                arrFibonacci = new BigInteger[request.LastIndex + 1];

                if (request.LastIndex <= 1)
                {
                    for (int i = 0; i < request.LastIndex; i++)
                    {
                        arrFibonacci[i] = request.LastIndex;
                    }
                }
                else
                {
                    try
                    {
                        timeOut      = request.TimeOfExecution;
                        amountMemory = request.AmountMemory;
                        useCache     = request.UseCache;

                        watch.Start();
                        CancellationTokenSource token = new CancellationTokenSource();
                        token.CancelAfter(timeOut);

                        await FibonacciAsync(request.LastIndex).ConfigureAwait(false);
                    }
                    catch (TimeoutException ex)
                    {
                        error            = true;
                        errorTimeExeeded = true;
                        errorMessage     = ex.Message;
                    }
                    catch (OutOfMemoryException ex)
                    {
                        error            = true;
                        errorOutOfMemory = true;
                        errorMessage     = ex.Message;
                    }
                    catch (StackOverflowException ex)
                    {
                        error        = true;
                        errorMessage = ex.Message;
                    }
                }

                watch.Stop();

                if (error)
                {
                    errorResponse.Description    = errorMessage;
                    errorResponse.TimeExceeded   = errorTimeExeeded;
                    errorResponse.TimeExecuted   = watch.Elapsed.TotalMilliseconds;
                    errorResponse.MemoryExceeded = errorOutOfMemory;
                    return(errorResponse);
                }

                response.Result = arrFibonacci;
                if (!error)
                {
                    _cache.SetFibonacciCache(request.LastIndex, arrFibonacci);
                }
                _cache.SetFibonacciCache(request.LastIndex, arrFibonacci);

                response.ResultWithIndex = PrepareResult(arrFibonacci, request.FirstIndex, request.LastIndex);
                response.TimeExecuted    = watch.Elapsed.TotalMilliseconds;
                return(response);
            }
            catch (TaskCanceledException)
            {
                errorResponse.Description    = errorMessage;
                errorResponse.TimeExceeded   = error;
                errorResponse.TimeExecuted   = watch.Elapsed.TotalMilliseconds;
                errorResponse.MemoryExceeded = errorOutOfMemory;
                return(errorResponse);
            }
        }
 public void ValidadeRequest(FibonacciRequest request)
 {
     new FibonacciRequest(request.FirstIndex, request.LastIndex, request.UseCache, request.TimeOfExecution, request.AmountMemory);
 }