/// <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); } }
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; }
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())); }
/// <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); }
/// <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); }
internal void OnRoverAttachedChange(RoverInput rover) { this.AttachedRover = rover; this.SyncStatusSprites(); }
/// <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 { } }
/// <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)); }