예제 #1
0
        public IActionResult TiltDownHead(long id)
        {
            HeadVO robotHead            = _robotService.GetHead(id);
            int    newInclinationNumber = ((int)robotHead.HeadInclination) + 1;

            return(ChangeRobotInclination(id, robotHead, newInclinationNumber));
        }
예제 #2
0
        public IActionResult RotateHeadToRight(long id)
        {
            HeadVO robotHead         = _robotService.GetHead(id);
            int    newRotationNumber = ((int)robotHead.HeadRotation) + 1;

            return(ChangeRobotHeadRotation(id, robotHead, newRotationNumber));
        }
예제 #3
0
        public bool PutHead(long id, HeadVO headMoved)
        {
            bool isHeadMoved = false;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_kraftwerkAPIUrl);

                Task <HttpResponseMessage> putTask = client.PutAsJsonAsync <HeadVO>($"api/Robot/{id}/Head", headMoved);
                putTask.Wait();

                HttpResponseMessage result = putTask.Result;

                if (result.IsSuccessStatusCode)
                {
                    isHeadMoved = true;
                }
                else if (result.StatusCode == HttpStatusCode.BadRequest)
                {
                    isHeadMoved = false;
                }
            }

            return(isHeadMoved);
        }
예제 #4
0
        private JsonResult ChangeRobotHeadRotation(long id, HeadVO robotHead, int newRotationNumber)
        {
            HeadRotation newHeadRotation;
            string       newHeadRotationDescription = string.Empty;

            bool isValidMovement = newRotationNumber.TryParseEnum(out newHeadRotation);

            if (isValidMovement)
            {
                robotHead.HeadRotation     = newHeadRotation;
                newHeadRotationDescription = robotHead.HeadRotation.GetDescription();

                bool isHeadMoved = _robotService.PutHead(id, robotHead);

                if (isHeadMoved == false)
                {
                    isValidMovement = false;
                }
            }

            return(Json(new { isValidMovement, description = newHeadRotationDescription }));
        }
예제 #5
0
        public HeadVO GetHead(long id)
        {
            HeadVO head = null;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_kraftwerkAPIUrl);

                Task <HttpResponseMessage> responseTask = client.GetAsync($"api/robot/{id}/Head");
                responseTask.Wait();

                HttpResponseMessage result = responseTask.Result;

                if (result.IsSuccessStatusCode)
                {
                    Task <HeadVO> readTask = result.Content.ReadAsAsync <HeadVO>();
                    readTask.Wait();
                    head = readTask.Result;
                }
            }

            return(head);
        }
예제 #6
0
        public bool CanMoveHead(RobotVO robot, HeadVO headMoved)
        {
            bool isInclinationMovement = IsInclinationMovement(robot, headMoved.HeadInclination);
            bool isRotationMovement    = IsRotationMovement(robot, headMoved.HeadRotation);

            // Não pode haver dois movimentos de uma vez
            if (isInclinationMovement && isRotationMovement)
            {
                return(false);
            }

            if (isInclinationMovement)
            {
                return(ChangeInclination(robot, headMoved.HeadInclination));
            }

            if (isRotationMovement)
            {
                return(ChangeRotation(robot, headMoved.HeadRotation));
            }

            //Não houve movimento
            return(true);
        }