IEnumerator SearchRobotsCoroutine() { robotDetailsList = new List <Robot>(); searchSuccess = false; searchResultsAvailable = false; searchReturn = ""; // If not logged in, log in first buddy if (!loginSuccess) { searchReturn = "Must login before trying to search available robots"; Debug.Log(searchReturn); searchResultsAvailable = true; yield break; } if ((DateTime.Now - lastSearch).Seconds < 1) { searchReturn = "Cannot search more than once per second"; Debug.Log(searchReturn); searchResultsAvailable = true; yield break; } lastSearch = DateTime.Now; var chosenRange = new GeoStruct { LowerLat = 0, LowerLong = 0, UpperLat = 0, UpperLong = 0 }; // TODO change search signature to just provide range because local and remote search logic should move into go var myNewThread = new Thread(() => ThreadedSearch(false, true, chosenRange)); myNewThread.Start(); while (!searchResultsAvailable) { yield return(null); } // Debug.Log(robotResults); Debug.Log(searchReturn); yield return(null); }
private void ThreadedSearch(bool getLocal, bool getRemote, GeoStruct chosenRange) { searchSuccess = false; searchResultsAvailable = false; searchReturn = ""; var errorFlag = false; var getRobotsRequest = new GetRobotsProtoRequest { GetLocal = false, GetRemote = true, Georange = chosenRange }; var getRobotsReply = AnimusClient.AnimusClient.GetRobots(getRobotsRequest); if (getRobotsReply.LocalSearchError != null) { if (!getRobotsReply.LocalSearchError.Success) { errorFlag = true; searchReturn = getRobotsReply.LocalSearchError.Description; } } if (getRobotsReply.RemoteSearchError != null) { if (!getRobotsReply.RemoteSearchError.Success) { errorFlag = true; searchReturn += " " + getRobotsReply.RemoteSearchError.Description; } } if (errorFlag) { Debug.Log("Error searching robots: " + searchReturn); searchResultsAvailable = true; return; } if (getRobotsReply.Robots.Count > 0) { _norobotsCount = 0; foreach (Robot a in getRobotsReply.Robots) { robotDetailsList.Add(a); Debug.Log($"{a.Make} {a.Model} robot called {a.Name}"); } Debug.Log("Finished search and robots found"); searchSuccess = true; } else { Debug.Log("Robots not found"); _norobotsCount += 1; if (_norobotsCount >= _norobotsMoreDetails) { searchReturn = "No robots found. Please search again.\nIf problem persists, check your WiFi connection or the robot's WiFi connection"; } else { searchReturn = "No robots found. Please search again."; } } searchResultsAvailable = true; }