IEnumerator ScenarioGetLoop(Func <QuickUser> UserGetter) { lastGetRequestTime = Time.time; while (true) { UserScenarioState responseScenario = null; bool errorReceived = false; lastGetRequestTime = Time.time; Database.GetUserScenarioState( UserGetter(), (result) => responseScenario = result, delegate { errorReceived = true; }); while (responseScenario == null && !errorReceived) { yield return(null); } if (errorReceived) { ResetDatabaseScenario(); } else { HandleDatabaseScenario(responseScenario, UserGetter()); } yield return(new WaitForSeconds(getLoopDelay - (Time.time - lastGetRequestTime))); } }
void HandleNewDatabaseScenario(UserScenarioState dBScenario) { // Start a new scenario if the database has a scenario to load. if (string.IsNullOrEmpty(dBScenario.currentScenario)) { return; } currentScenarioState = dBScenario; StartScenario(dBScenario.currentScenario); }
public void StartScenario(string scenario) { // Update our scenario's user. if (currentScenarioState == null || Login.CurrentUser != currentScenarioState.user) { currentScenarioState = new UserScenarioState(scenario, Login.CurrentUser); } // Set our scenario, and stream that we are using this scenario. currentScenarioState.currentScenario = scenario; // Close, then tell that a scenario was loaded. Close(); ScenarioLoaded?.Invoke(currentScenarioState.currentScenario); }
void HandleDatabaseScenario(UserScenarioState loadedScenario, QuickUser user) { if (string.IsNullOrEmpty(loadedScenario.currentScenario)) { return; } // If the scenario state from the database is too old, reset it and stop. DateTime parsedDate = JavascriptDateUtility.ToDateTime(loadedScenario.startDate); if ((DateTime.Now - parsedDate).TotalMinutes > 1) { ResetDatabaseScenario(); return; } loadedScenario.user = user; DatabaseScenario.Value = loadedScenario; return; }