public async void CorrectWin() { // events.PublishOnBackgroundThread(new CorrectLastGameResult(gameResult.Id){ Won = true }); if (gameResult == null) { return; } gameResult.Victory = true; Victory = true; await gameManager.UpdateGame(gameResult); }
public async Task Save() { using (var busy = Busy.GetTicket()) { GameResultModel gameResult = null; var added = false; if (LastGameId == null) { gameResult = new GameResultModel(); added = true; } else { // gameResult = (await gameRepository.FirstOrDefaultAsync(x => x.Id == this.LastGameId)).ToModel(); gameResult = SelectedGame; } SetGameResult(gameResult); if (ArenaSession != null) { gameResult.ArenaSession = ArenaSession; } if (added) { await gameManager.AddGame(gameResult); } else { await gameManager.UpdateGame(gameResult); } events.PublishOnBackgroundThread(new SendNotification("Game successfully saved.")); LastGameId = gameResult.Id; LoadGameResult(gameResult); } }
private async Task HandleArenaDetect() { if (!GlobalLocks.NewArenaLock.Wait(1000)) { Log.Debug("Waited for NewArenaLock lock"); GlobalLocks.NewArenaLock.Wait(); } // arena session is always the latest session in the db. var serverName = BindableServerCollection.Instance.DefaultName; var latestArena = arenaRepository.Query(a => a.Where(x => x.Server == serverName).OrderByDescending(x => x.StartDate).FirstOrDefault().ToModel()); try { if (latestArena == null) { latestArena = await TryCreateArenaSession(detectedHero); return; } // weird case if (latestArena.IsEnded && latestArena.EndDate != null) { var diff = DateTime.Now.Subtract(latestArena.EndDate.Value); if (diff < TimeSpan.FromMinutes(5)) { Log.Debug("Latest arena is ended (and ended less then 5 minutes ago). Ignoring..."); return; //Log.Debug("Latest arena is ended (and started more then 5 minutes ago). Creating new arena"); //latestArena = await TryCreateArenaSession(detectedHero); //return; } } // new arena started because new hero if (detectedHero != latestArena.Hero.Key) { Log.Debug("detectedHero ({0}) != latestArena.Hero.Key ({1}), starting new arena.", detectedHero, latestArena.Hero.Key); if (!latestArena.IsEnded) { Log.Debug("Retiring, previous arena."); // retired await Retire(latestArena); } latestArena = await TryCreateArenaSession(detectedHero); return; } // check if we need to correct last game if (latestArena.IsEnded) { if (detectedLosses >= 0 && detectedLosses < 3) { // last game was not a loss Log.Debug("Correcting last game to be a win, because arena was ended, but losses is {0}.", detectedLosses); var lastgame = latestArena.Games.OrderByDescending(x => x.Started).FirstOrDefault(); if (lastgame != null) { lastgame.Victory = true; await gameManager.UpdateGame(lastgame); } } } // doesn't work very well. //if ((detectedLosses >= 0 && detectedLosses < latestArena.Losses) || // (detectedWins >= 0 && detectedWins < latestArena.Wins)) //{ // Log.Debug( // "Detected wins/losses ({0}/{1}) smaller then last ({2}/{3}). Starting new arena.", // detectedWins, // detectedLosses, // latestArena.Wins, // latestArena.Losses); // latestArena = await TryCreateArenaSession(detectedHero); // return; //} } finally { LatestArenaSession = latestArena; detectedHero = null; detectedWins = -1; detectedLosses = -1; handlingArenaDetect = false; if (latestArena != null) { Load(latestArena); if (latestArena.Image1 == null) { // add screenshot async arenaIdForScreenshot = latestArena.Id; TakingScreenshot = true; CanTakeScreenshot = false; Task.Delay(1000).ContinueWith(t => events.PublishOnBackgroundThread(new RequestArenaDeckScreenshot())); } } } }