コード例 #1
0
ファイル: Program.cs プロジェクト: StanislawBanski/GrpcCourse
        private static void Sqrt(Channel channel)
        {
            Console.WriteLine("Sqrt service");
            var sqrtClient = new SqrtService.SqrtServiceClient(channel);

            var number = new Sqrt.Number
            {
                A = -1
            };

            try
            {
                var sqrtRequest = new SqrtRequest()
                {
                    Number = number
                };

                var sqrtResponse = sqrtClient.SquareRoot(sqrtRequest);

                Console.WriteLine(sqrtResponse.Result);
                Console.WriteLine("");
            }
            catch (RpcException e)
            {
                Console.WriteLine("Error : " + e.Status.Detail);
            }
        }
コード例 #2
0
        public SqrtResult Sqrt([FromBody] SqrtRequest sqrtRequest)
        {
            var    headers     = this.Request.Headers.ToList();
            string tracking_ID = headers[headers.Count - 1].Value.First().ToString();

            return(CalculatorBL.Sqrt(sqrtRequest, tracking_ID));
        }
コード例 #3
0
ファイル: Calculator.cs プロジェクト: germangc125/Calculator
        internal static void Sqrt(SqrtRequest sqrtRequest, string eviTrackingIDSqrt)
        {
            var client  = new RestClient(urlBase);
            var request = new RestRequest("Sqrt", Method.POST);

            if (eviTrackingIDSqrt != "")
            {
                request.AddHeader("x-evi-tracking-id", eviTrackingIDSqrt);
            }
            else if (eviTrackingIDSqrt == "")
            {
                request.AddHeader("x-evi-tracking-id", "0");
            }
            request.AddParameter("application/json", new JavaScriptSerializer().Serialize(sqrtRequest), ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);

            Console.WriteLine();
            if (response.StatusCode == HttpStatusCode.OK)
            {
                SqrtResult result = (new JavaScriptSerializer()).Deserialize <SqrtResult>(response.Content);
                Console.WriteLine("Resultado: Cuadrado: " + result.Square + ". " + (eviTrackingIDSqrt != "" ? "y se guardo en el log." : ""));
            }
            else
            {
                Console.WriteLine("Ha ocurrido un error: " + response.ErrorMessage);
            }
            Console.WriteLine("Fin del programa, va a volver al menu");
            Console.WriteLine();
        }
コード例 #4
0
        public SqrtResponse Sqrt(SqrtRequest request, string trakingId)
        {
            log.Trace("this is the service -> Sqrt");
            SqrtResponse sqrt = new SqrtResponse();

            try
            {
                sqrt.Square = (int)Math.Sqrt(request.Number);
                log.Trace(HttpStatusCode.OK);
                if (trakingId != null)
                {
                    var op = new Operation()
                    {
                        name        = "Sqrt",
                        date        = DateTime.Now,
                        calculation = string.Join("^", request.Number)
                    };
                    JournalList.Add(new KeyValuePair <string, Operation>(trakingId, op));
                }
            }
            catch (Exception e)
            {
                log.Error("Error in the controller Sqrt " + e);
                log.Error(HttpStatusCode.InternalServerError);
                throw new Exception();
            }
            return(sqrt);
        }
コード例 #5
0
ファイル: Client.cs プロジェクト: sasanchez7/calculatorv3
        } // class

        #endregion

        #region method_SquareRootPetition
        public static void SquareRootPetition(SqrtRequest calc, int id)
        {
            try
            {
                var httpWebRequest = HeaderBuilder("Calculator", "sqrt", id);

                string json = JsonConvert.SerializeObject(calc);

                SendRequest(httpWebRequest, json);

                SqrtResponse    response     = null;
                HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    response = JsonConvert.DeserializeObject <SqrtResponse>(result);
                }

                Console.WriteLine("Square: {0}", response.Square + "\n\npress enter to continue.");
                Console.ReadKey();
            }
            catch (WebException webex)
            {
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string       text   = reader.ReadToEnd();
                }
            }
        } // class
コード例 #6
0
 public override Task <SqrtResponse> Sqrt(SqrtRequest request, CancellationToken cancellationToken)
 {
     _ = request ?? throw new ArgumentNullException(nameof(request));
     return(Task.FromResult(new SqrtResponse
     {
         Value = request.Value < 0 ? double.NaN : Math.Sqrt(request.Value),
     }));
 }
コード例 #7
0
        public SqrtResponse sqrt([FromBody] SqrtRequest value)
        {
            logger.Trace("Service called: sqrt");

            /* An invalid request has been received.
             * This may mean the HTTP requests and/or the HTTP body may contains some errors which should be fixed
             * */
            if (value == null)
            {
                logger.Error(HttpStatusCode.BadRequest);
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            try
            {
                SqrtResponse result = new SqrtResponse();

                // Execute operation: Sub
                String forJournal = "";

                result.Square = Math.Sqrt(value.Number);
                forJournal    = "√" + value.Number + " = " + result.Square;


                if (Request != null && Request.Headers != null)
                {
                    var headers = Request.Headers;

                    if (headers.Contains("X-Evi-Tracking-Id"))
                    {
                        // Must store this request’s details inside it’s journal
                        string trackingId = headers.GetValues("X-Evi-Tracking-Id").First();
                        logger.Info("X-Evi-Tracking-Id = " + trackingId);

                        Operation operation = new Operation
                        {
                            OperationDes = "Sqrt",
                            Calculation  = forJournal,
                            Date         = DateTime.Now.ToString("u")
                        };

                        Journal.store(trackingId, operation);
                        logger.Trace("Sqrt success!!");
                    }
                }

                return(result);
            }
            catch (Exception ex)
            {
                logger.Error(ex);

                /*
                 * An unexpected error condition was triggered which made impossible to fulfill the request. Please try again or contact support
                 * */
                throw new HttpResponseException(HttpStatusCode.InternalServerError);
            }
        }
コード例 #8
0
        public IHttpActionResult Square(SqrtRequest request)
        {
            string dataJournal = "";

            IEnumerable <string> headerValues;

            logger.Trace("Service called: square root");

            // An invalid request has been received
            // This may mean the HTTP requests and/or the HTTP body may contains some errors which should be fixed

            if (request == null)
            {
                logger.Error(HttpStatusCode.BadRequest);

                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            try
            {
                SqrtResponse result = new SqrtResponse();


                // Execute operation: Square root
                result.Square = Math.Sqrt(request.Number);

                dataJournal = "√" + request.Number + " = " + result.Square;

                logger.Trace("Square success!!");

                // If tracking ID exists create operation instance and store in journal
                if (Request.Headers.TryGetValues("X-Evi-Tracking-Id", out headerValues))
                {
                    string id;

                    id = headerValues.FirstOrDefault();

                    var operation = new Operation()
                    {
                        Name        = "square root",
                        Calculation = dataJournal,
                        Date        = DateTime.Now
                    };

                    Journal.Store(id, operation);
                }

                return(Ok(result));
            }
            catch (Exception ex)
            {
                logger.Error(ex);

                // An unexpected error condition was triggered which made impossible to fulfill the request
                throw new HttpResponseException(HttpStatusCode.InternalServerError);
            }
        }
コード例 #9
0
        public void SqrtRequest_CorrectlyReturnsOperationname()
        {
            var expected = "sqrt";
            var request  = new SqrtRequest();

            var operationName = request.GetOperationName();

            operationName.Should().Be(expected);
        }
コード例 #10
0
        public static string Root()
        {
            SqrtRequest petition = new SqrtRequest();

            Console.WriteLine("Introduce el número, cuya raíz cuadrada quieras saber");
            petition.Number = ParseStringToInteger(Console.ReadLine());
            var response = JsonConvert.DeserializeObject <SqrtResponse>(LaunchRequestAndReceiveResponse(petition, "sqrt"));

            return(String.Format("La raíz cuadrada del número dado es: {0}", response.Square));
        }
コード例 #11
0
        public async Task Sqrt_WithNumberLowerThan0_Returns400Response()
        {
            var request = new SqrtRequest()
            {
                Number = -1
            };
            var client = _factory.CreateClient();

            var response = await client.PostJsonAsync("/calculator/sqrt", request);

            response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
        }
コード例 #12
0
        public void SqrtRequestValidator_WithNumberDifferentTo0_IsSuccessful()
        {
            var request = new SqrtRequest
            {
                Number = 5
            };
            var validator = new SqrtRequestValidator();

            var result = validator.Validate(request);

            result.IsValid.Should().BeTrue();
        }
コード例 #13
0
        public void SqrtRequestValidator_WithNNumberLowerThan0_IsNotSuccessful()
        {
            var request = new SqrtRequest
            {
                Number = -1
            };
            var validator = new SqrtRequestValidator();

            var result = validator.Validate(request);

            result.IsValid.Should().BeFalse();
        }
コード例 #14
0
        public async Task SqrtHandler_CalculatesSquareRoot()
        {
            var request = new SqrtRequest
            {
                Number = TestHelper.GeneratePositiveNumber()
            };
            var expected = Math.Sqrt(request.Number);
            var handler  = new SqrtHandler();

            var response = await handler.Handle(request, default);

            response.Square.Should().Be(expected);
        }
コード例 #15
0
        public void SqrtRequest_CorrectlyFormatsRequestForJournal()
        {
            var number   = TestHelper.GeneratePositiveNumber();
            var expected = $"{(char)0x221A}{number}";
            var request  = new SqrtRequest
            {
                Number = number
            };

            var formattedRequest = request.GetFormatedRequest();

            formattedRequest.Should().Be(expected);
        }
コード例 #16
0
        /// <summary>
        /// Group the Sqrt operations.
        /// </summary>
        static public void SqrtMethod()
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("RAIZ CUADRADA");
            Console.ForegroundColor = ConsoleColor.White;
            int number = int.Parse(ValidarNumero("Ingrese el número:"));

            string      logSqrt     = ValidarNumeroEspacio("\nIngrese el identificador del Log OPCIONAL:");
            SqrtRequest sqrtRequest = new SqrtRequest();

            sqrtRequest.Number = number;
            ManagementCalculator.Sqrt(sqrtRequest, logSqrt);
        }
コード例 #17
0
        public override async Task <SqrtResponse> Sqrt(SqrtRequest request, ServerCallContext context)
        {
            var number = request.Number;

            if (number >= 0)
            {
                return(new SqrtResponse {
                    SqrtRoot = Math.Sqrt(number)
                });
            }

            throw new RpcException(new Status(StatusCode.InvalidArgument, "number < 0"));
        }
コード例 #18
0
        public void Sqrt_ShouldReturnOK()
        {
            SqrtRequest testRequest = new SqrtRequest();

            testRequest.Number = 16;


            var controller = new CalculatorController();

            var result = controller.sqrt(testRequest) as SqrtResponse;

            Assert.AreEqual(4, result.Square);
        }
コード例 #19
0
        public IHttpActionResult Sqrt(SqrtRequest request)
        {
            log.Info("this is the controller -> Sqrt");
            if (request == null)
            {
                log.Error(HttpStatusCode.BadRequest);
                return(BadRequest());
            }
            var id = Request.Headers.GetValues("X-Evi-Tracking-Id").FirstOrDefault();

            var res = servicio.Sqrt(request, id);

            return(Ok(res));
        }
コード例 #20
0
        public void Sqrt_ShouldReturnBadRequest()
        {
            try
            {
                SqrtRequest testRequest = new SqrtRequest();

                var controller = new CalculatorController();

                var result = controller.sqrt(testRequest) as SqrtResponse;
            }
            catch (HttpResponseException ex)
            {
                Assert.AreEqual(ex.Response.StatusCode, HttpStatusCode.BadRequest);
            }
        }
コード例 #21
0
        public SqrtResponse Postsqrt([FromBody] SqrtRequest entry)
        {
            SqrtResponse raiz = new SqrtResponse
            {
                Square = Math.Sqrt(entry.Number)
            };

            if (Request.Headers["X-Evi-Tracking-Id"].Any())
            {
                var identification = Request.Headers["X-Evi-Tracking-Id"];
                var currentUser    = UsersHandler.KnownOrNot(identification);
                currentUser.Operations.Add(new SqrtOperation(entry, raiz));
            }
            return(raiz);
        }
コード例 #22
0
        public override async Task <SqrtResponse> SquareRoot(SqrtRequest request, ServerCallContext context)
        {
            int number = request.Number.A;

            if (number >= 0)
            {
                return(new SqrtResponse()
                {
                    Result = Math.Sqrt(number)
                });
            }
            else
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Number below 0"));
            }
        }
コード例 #23
0
 public override Task <SqrtResponse> Sqrt(SqrtRequest request, ServerCallContext context)
 {
     if (request.Number >= 0)
     {
         var res = new SqrtResponse()
         {
             SquareRoot = Math.Sqrt(request.Number)
         };
         return(Task.FromResult(res));
     }
     else
     {
         throw new RpcException(new Status(StatusCode.InvalidArgument,
                                           $"number {request.Number} has to be greater or equal than 0"));
     }
 }
コード例 #24
0
        public override async Task <SqrtResponse> Sqrt(SqrtRequest request, ServerCallContext context)
        {
            int square = request.Square;

            if (square >= 0)
            {
                return(new SqrtResponse()
                {
                    SquareRoot = Math.Sqrt(square)
                });
            }
            else
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "number(square) < 0"));
            }
        }
コード例 #25
0
        public override async Task <SqrtResponse> sqrt(SqrtRequest request, ServerCallContext context)
        {
            int number = request.Number;

            if (number >= 0)
            {
                return new SqrtResponse()
                       {
                           SquareRoot = Math.Sqrt(number)
                       }
            }
            ;
            else
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "number<0"));//to not stop server after throwing exception, async is made
            }
        }
コード例 #26
0
        public string SqrtPost(SqrtRequest calc)
        {
            var headerRequest = this.Request.Headers;
            int id            = ServerCalc.getIdHeader(headerRequest);

            SqrtResponse response = server.ServerCalc.SquareRooCalculation(calc.Number);

            if (id != -1)
            {
                var fecha = DateTime.UtcNow;
                fecha.ToString("O");
                Query addquery = new Query(Operations.Sqrt, $"√{calc.Number}={response.Square}", fecha);
                ServerCalc.writeQuery(id, addquery);
            }

            return(JsonConvert.SerializeObject(response));
        }
コード例 #27
0
        public override async Task <SqrtResponse> Sqrt(SqrtRequest request, ServerCallContext context)
        {
            var num = request.Number;

            if (num >= 0)
            {
                return new SqrtResponse()
                       {
                           SquareRoot = Math.Sqrt(num)
                       }
            }
            ;
            else
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, $"number : {num}"));
            }
        }
コード例 #28
0
        public async Task Sqrt_WithTrackingId_TracksOperation()
        {
            var request = new SqrtRequest();
            var trackId = "Sqrt_WithTrackingId_TracksOperation";
            var client  = _factory.CreateClient()
                          .WithTrackIdHeader(trackId);

            await client.PostJsonAsync("/calculator/sqrt", request);

            using (new AssertionScope())
            {
                _factory.Journal.TryGetValue(trackId, out ICollection <JournalOperation> journalOperations)
                .Should().BeTrue();
                journalOperations.Should().ContainSingle()
                .Which.Operation.Should().Be(request.GetOperationName());
            }
        }
コード例 #29
0
        public static void handleSqrt()
        {
            Console.WriteLine("Type a number");
            var numberStr = Console.ReadLine();

            int.TryParse(numberStr, out var number);

            var sqrtRequest = new SqrtRequest()
            {
                Number = number
            };

            var sqrtResponse = SqrtRPC.Execute(host, port, sqrtRequest).Result;

            if (sqrtResponse != null)
            {
                Console.WriteLine($"Result: {sqrtResponse.SquareRoot}");
            }
        }
コード例 #30
0
        public async Task <ActionResult <SqrtResponse> > PostSqrt([FromBody] SqrtRequest request)
        {
            var validate = sqrtValidator.Validate(request);

            if (!validate.IsValid)
            {
                return(BadRequest(new ErrorResponse("BadRequest", "Unable to process request", "400", validate.Errors)));
            }

            var parameters = mapper.Map <SqrtParams>(request);
            var operation  = GetOp <SqrtParams, IntResult>(nameof(SqrtService));
            var result     = await operation.Execute(parameters);

            logger.LogInformation($"PostSqrt executed");

            var resultResponse = this.mapper.Map <SqrtResponse>(result);

            return(resultResponse);
        }