//Refresh the live game table private void RefreshLiveGameTable(string Player1, string Player2) { using (var cdb = new minesweeper_RonOzeritskyEntities()) { try { LiveGame liveGame = new LiveGame { Serial = LiveGamesCounterAdd(), Player1Name = Player1, Player2Name = Player2, GameStarted = GetCurrentDateTime() }; cdb.LiveGames.Add(liveGame); cdb.Entry(liveGame).State = System.Data.Entity.EntityState.Added; cdb.SaveChanges(); } catch (Exception) { UserFaultException fault = new UserFaultException() { Message = "Server error." }; throw new FaultException <UserFaultException>(fault); } } }
// The player has finished playing public void PlayerFinishedPlaying(string playerName, string opponent) { using (var cdb = new minesweeper_RonOzeritskyEntities()) { try { LiveGame endedGame = (from g in cdb.LiveGames where g.Player1Name == playerName || g.Player2Name == playerName select g).SingleOrDefault(); if (endedGame != null) { cdb.LiveGames.Remove(endedGame); cdb.Entry(endedGame).State = System.Data.Entity.EntityState.Deleted; cdb.SaveChanges(); } } catch (Exception) { UserFaultException fault = new UserFaultException() { Message = "Server error." }; throw new FaultException <UserFaultException>(fault); } } if (playingClients.Contains(playerName)) { playingClients.Remove(playerName); playingClients.Remove(opponent); UpdateClientsLists(); GameMatch match = liveGames.Find(g => g.playerYellow == playerName); if (match == null) { match = liveGames.Find(g => g.playerBlue == playerName); } LiveGamesCounterReduce(); if (match != null) { liveGames.Remove(match); } Thread gameExit = new Thread(() => clients[opponent].GameExit(playerName)); gameExit.Start(); } }
//Update the DB after game ends private void EndGameDBUpdate(string winner, string loser, bool isTie) { //Remove game from Livegames table. using (var cdb = new minesweeper_RonOzeritskyEntities()) { try { LiveGame endedGame = (from g in cdb.LiveGames where g.Player1Name == winner || g.Player2Name == winner select g).SingleOrDefault(); if (endedGame != null) { cdb.LiveGames.Remove(endedGame); cdb.Entry(endedGame).State = System.Data.Entity.EntityState.Deleted; cdb.SaveChanges(); } } catch (Exception) { UserFaultException fault = new UserFaultException() { Message = "Server error." }; throw new FaultException <UserFaultException>(fault); } } //Add game to Games table. using (var cdb = new minesweeper_RonOzeritskyEntities()) { try { Game game = new Game { Serial = gamesCounter, Winner = winner, Loser = loser, Tie = isTie, GameEnded = GetCurrentDateTime() }; cdb.Games.Add(game); cdb.Entry(game).State = System.Data.Entity.EntityState.Added; cdb.SaveChanges(); } catch (Exception) { UserFaultException fault = new UserFaultException() { Message = "Server error." }; throw new FaultException <UserFaultException>(fault); } } //Update Clients table properties. using (var cdb = new minesweeper_RonOzeritskyEntities()) { try { if (!isTie) { Client Winner = (from w in cdb.Clients where w.Name == winner select w).SingleOrDefault(); Winner.GamesPlayed++; Winner.Points++; Winner.GamesWon++; Client Loser = (from l in cdb.Clients where l.Name == loser select l).SingleOrDefault(); Loser.GamesPlayed++; Loser.GamesLost++; cdb.Entry(Winner).State = System.Data.Entity.EntityState.Modified; cdb.Entry(Loser).State = System.Data.Entity.EntityState.Modified; cdb.SaveChanges(); } else //its Tie { Client Winner = (from w in cdb.Clients where w.Name == winner select w).SingleOrDefault(); Winner.GamesPlayed++; Winner.GamesTie++; Client Loser = (from l in cdb.Clients where l.Name == loser select l).SingleOrDefault(); Loser.GamesPlayed++; Loser.GamesTie++; cdb.Entry(Winner).State = System.Data.Entity.EntityState.Modified; cdb.Entry(Loser).State = System.Data.Entity.EntityState.Modified; cdb.SaveChanges(); } } catch (Exception) { UserFaultException fault = new UserFaultException() { Message = "Server error." }; throw new FaultException <UserFaultException>(fault); } } }