//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);
                }
            }
        }