Ejemplo n.º 1
0
        /// <summary>
        /// call get points service hosted in azure
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <RoverFinalPoints> GetFinalPoints(RoverInput input)
        {
            try
            {
                RoverFinalPoints finalData = new RoverFinalPoints();

                JObject oJsonObject = new JObject();
                oJsonObject.Add("commands", input.commands);
                oJsonObject.Add("startXPos", input.startXPos);
                oJsonObject.Add("startYPos", input.startYPos);
                oJsonObject.Add("max", input.max);
                oJsonObject.Add("startDirection", (int)input.startDirection);

                var content = new StringContent(oJsonObject.ToString(), Encoding.UTF8, "application/json");
                HttpResponseMessage response = await _client.PostAsync("https://getpath.azurewebsites.net/api/GetRoverPositions?code=bZShJRLsump/xpZuafRYvLqOFTIdDvghauBVRjIYaqALstSRYSPqqQ==", content);

                if (response.IsSuccessStatusCode)
                {
                    JsonSerializerSettings serSettings = new JsonSerializerSettings();
                    serSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                    var res = response.Content.ReadAsStringAsync().Result;
                    res = JToken.Parse(res).ToString();
                    serSettings.StringEscapeHandling = StringEscapeHandling.Default;
                    finalData = JsonConvert.DeserializeObject <RoverFinalPoints>(res, serSettings);
                }
                return(finalData);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("\tERROR {0}", ex.Message);
                return(null);
            }
        }
Ejemplo n.º 2
0
    internal void RefreshResources(bool isInVehicle, RoverInput roverInput = null)
    {
        RoverOxygen = isInVehicle ? new SingleSurvivalResource()
        {
            Data       = new PackResourceData(roverInput.Data.Oxygen, Oxygen.Data.ConsumptionPerSecond / Matter.Oxygen.Kilograms()),
            AudioClips = Oxygen.AudioClips,
            UpdateUI   = GuiBridge.Instance.RefreshRoverOxygenBar
        } : null;
        RoverPower = isInVehicle ? new SingleSurvivalResource()
        {
            Data       = new PackResourceData(roverInput.Data.EnergyContainer, Power.Data.ConsumptionPerSecond),
            AudioClips = Power.AudioClips,
            UpdateUI   = GuiBridge.Instance.RefreshRoverPowerBar
        } : null;

        bool isInHabitat = CurrentHabitat != null;

        HabitatOxygen = isInHabitat ? new SingleSurvivalResource()
        {
            Data       = new PackResourceData(CurrentHabitat.Data.Containers[Matter.Oxygen], Oxygen.Data.ConsumptionPerSecond / Matter.Oxygen.Kilograms()),
            AudioClips = Oxygen.AudioClips,
            UpdateUI   = GuiBridge.Instance.RefreshHabitatOxygenBar
        } : null;
        HabitatPower = isInHabitat ? new SingleSurvivalResource()
        {
            Data       = new PackResourceData(CurrentHabitat.HabitatData.EnergyContainer, Power.Data.ConsumptionPerSecond),
            AudioClips = Power.AudioClips,
            UpdateUI   = GuiBridge.Instance.RefreshHabitatPowerBar
        } : null;
    }
Ejemplo n.º 3
0
        public ActionResult <RoverReport> SimulateRun(RoverInput input)
        {
            var rover = new Rover(Position.FromDto(input.initialPosition), input.battery, PlanetMap.FromArray(input.terrain), new CommandTranslator());

            rover.RunCommands(string.Join("", input.commands));

            return(Ok(rover.GenerateReport()));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// get final points from azure
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <RoverFinalPoints> GetFinalPosFromAzure(RoverInput input)
        {
            RoverService     service = new RoverService();
            RoverFinalPoints res     = await service.GetFinalPoints(input);

            if (res != null && res.FlowPath.Length > 0)
            {
                return(res);
            }
            return(null);
        }
        public void To_Check_For_The_Rotation_Of_Rover_Left()
        {
            Map         map           = new Map(10, 12);
            RoverInput  roverInput    = new RoverInput(1, 2);
            RoverMoment roverMovement = new RoverMoment(roverInput, EnumDirection.North, map);

            roverMovement.Left();
            Assert.AreEqual(EnumDirection.West, roverMovement.FacingDirection);
            roverMovement.Left();
            Assert.AreEqual(EnumDirection.South, roverMovement.FacingDirection);
            roverMovement.Right();
            Assert.AreEqual(EnumDirection.West, roverMovement.FacingDirection);
        }
        public void To_Check_For_The_Movements_Of_Rover_LMLMMMLRRM()
        {
            Map         map           = new Map(5, 6);
            RoverInput  roverInput    = new RoverInput(2, 3);
            RoverMoment roverMovement = new RoverMoment(roverInput, EnumDirection.South, map);

            roverMovement.Left();
            roverMovement.Move();
            roverMovement.Left();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Left();
            roverMovement.Right();
            roverMovement.Right();
            roverMovement.Move();
            Assert.AreEqual(4, roverInput.XCoOrdinate);
            Assert.AreEqual(5, roverInput.YCoOrdinate);
            Assert.AreEqual(EnumDirection.East, roverMovement.FacingDirection);
        }
        public void To_Check_For_The_Movements_Of_Rover_MM()
        {
            Map         map           = new Map(5, 5);
            RoverInput  roverInput    = new RoverInput(1, 1);
            RoverMoment roverMovement = new RoverMoment(roverInput, EnumDirection.North, map);

            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            roverMovement.Move();
            Assert.AreEqual(1, roverInput.XCoOrdinate);
            Assert.AreEqual(5, roverInput.YCoOrdinate);
            Assert.AreEqual(EnumDirection.North, roverMovement.FacingDirection);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// for executing the rover com,mand in the text box
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        async void OnExecuteCommand(System.Object sender, System.EventArgs e)
        {
            try
            {
                // max line is two, first line is postion and next is commands
                int numLines = CommandEditor.Text.Split('\n').Length;
                if (numLines != 2)
                {
                    await DisplayAlert(Constants.Error, Constants.CommandInvalid, Constants.Ok);

                    return;
                }

                ShowActivityControl(true);

                // parse input from the text box
                drawPath = true;
                var commandsText = CommandEditor.Text.Trim().Split('\n').ToList();
                var startpos     = commandsText[0].Split(' ').ToList();
                startingPos.X     = Convert.ToDouble(startpos[0]);
                startingPos.Y     = Convert.ToDouble(startpos[1]);
                startingDirection = startpos[2].ToString();
                commands          = commandsText[1];

                // create input for web service from the commands and first pos
                RoverInput input = new RoverInput()
                {
                    commands       = commands,
                    startXPos      = startingPos.X,
                    startYPos      = startingPos.Y,
                    max            = rows,
                    startDirection = (int)(RoverDirection)Enum.Parse(typeof(RoverDirection), startingDirection)
                };

                // invoke web service, whuch will return final postion of the rover and flow paths
                // services are developer and hosteed in azure portal using azure functions
                HomeViewModel model = (HomeViewModel)this.BindingContext.DataContext;
                var           res   = await model.GetFinalPosFromAzure(input);

                if (res != null)
                {
                    flowPath       = res.FlowPath.ToList();
                    finalXPos      = float.Parse(res.FinalXPos);
                    finalYPos      = float.Parse(res.FinalYPos);
                    finalFirection = res.FinalDirection;
                    outputpath     = "Final Points : " + res.FinalXPos + " , " + res.FinalYPos + " Direction : " + finalFirection;
                    canvasView.InvalidateSurface();
                }


                ShowActivityControl(false);
            }
            catch (Exception ex)
            {
                await DisplayAlert(Constants.Error, Constants.OutofCordinates, Constants.Ok);

                ShowActivityControl(false);
            }

            ShowActivityControl(false);
        }
Ejemplo n.º 9
0
 internal void OnRoverAttachedChange(RoverInput rover)
 {
     this.AttachedRover = rover;
     this.SyncStatusSprites();
 }
Ejemplo n.º 10
0
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <exception cref="ApiException">A server side error occurred.</exception>
        public async System.Threading.Tasks.Task <RoverReport> SimulateRunAsync(RoverInput input, System.Threading.CancellationToken cancellationToken)
        {
            var urlBuilder_ = new System.Text.StringBuilder();

            urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/Rover");

            var client_ = _httpClient;

            try
            {
                using (var request_ = new System.Net.Http.HttpRequestMessage())
                {
                    var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(input, _settings.Value));
                    content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
                    request_.Content             = content_;
                    request_.Method = new System.Net.Http.HttpMethod("POST");
                    request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

                    PrepareRequest(client_, request_, urlBuilder_);
                    var url_ = urlBuilder_.ToString();
                    request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
                    PrepareRequest(client_, request_, url_);

                    var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

                    try
                    {
                        var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
                        if (response_.Content != null && response_.Content.Headers != null)
                        {
                            foreach (var item_ in response_.Content.Headers)
                            {
                                headers_[item_.Key] = item_.Value;
                            }
                        }

                        ProcessResponse(client_, response_);

                        var status_ = ((int)response_.StatusCode).ToString();
                        if (status_ == "200")
                        {
                            var objectResponse_ = await ReadObjectResponseAsync <RoverReport>(response_, headers_).ConfigureAwait(false);

                            return(objectResponse_.Object);
                        }
                        else
                        if (status_ != "200" && status_ != "204")
                        {
                            var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);

                            throw new ApiException("The HTTP status code of the response was not expected (" + (int)response_.StatusCode + ").", (int)response_.StatusCode, responseData_, headers_, null);
                        }

                        return(default(RoverReport));
                    }
                    finally
                    {
                        if (response_ != null)
                        {
                            response_.Dispose();
                        }
                    }
                }
            }
            finally
            {
            }
        }
Ejemplo n.º 11
0
 /// <exception cref="ApiException">A server side error occurred.</exception>
 public System.Threading.Tasks.Task <RoverReport> SimulateRunAsync(RoverInput input)
 {
     return(SimulateRunAsync(input, System.Threading.CancellationToken.None));
 }