/// <summary> /// call for clients to login /// if clients doesn't exist or player already connected will throw fault accordingly /// </summary> /// <param name="username"></param> /// <param name="password"></param> public void PlayerLogin(string username, string password) { using (var ctx = new FIARDBContext()) { var player = (from p in ctx.Players where p.UserName == username && p.Pass == password select p).FirstOrDefault(); if (player == null) { var f = new PlayerDoesntExistInDataBase(username); SendStatusMessageEx(f.Details); throw new FaultException <PlayerDoesntExistInDataBase>(f); } if (player.Status != 0) { PlayerAlreadyConnectedFault f = new PlayerAlreadyConnectedFault(username); SendStatusMessageEx(f.Details); throw new FaultException <PlayerAlreadyConnectedFault>(f); } player.Status = 1; ctx.SaveChanges(); IFIARSCallback callback = OperationContext.Current.GetCallbackChannel <IFIARSCallback>(); var getPlayers = GetAvalibalePlayers(); foreach (var c in clients) { c.Value.UpdateClients(getPlayers); } clients.Add(new PlayerInfo(player), callback); SendStatusMessageEx("Login : "******" Loged in!"); } }
/// <summary> /// on creating host we reseting the players status to logged out /// </summary> private void Init() { clients = new Dictionary <PlayerInfo, IFIARSCallback>(); using (var ctx = new FIARDBContext()) { //making all players offline before server starts var players = (from p in ctx.Players select p).ToList(); foreach (var player in players) { player.Status = 0; } //Removes all games that didn't ended in case server crashed var gTmp = (from g in ctx.Games where g.Player1Points == 0 && g.Player2Points == 0 select g).ToList(); foreach (var g in gTmp) { ctx.Games.Remove(g); } ctx.SaveChanges(); } checkEveryOne(); }
private Status ChangeStatus(Status s) { using (var ctx = new FIARDBContext()) { var player = (from pl in ctx.Players where pl.UserName == username select pl).FirstOrDefault(); player.Status = (int)s; ctx.SaveChanges(); } return(s); }
/// <summary> /// return all players in the database /// </summary> /// <returns></returns> public List <PlayerInfo> GetAllPlayers() { using (var ctx = new FIARDBContext()) { var players = (from p in ctx.Players select p).ToList(); List <PlayerInfo> pi = new List <PlayerInfo>(); foreach (var player in players) { pi.Add(new PlayerInfo(player)); } return(pi); } }
/// <summary> /// return all ongoing games currently /// </summary> /// <returns></returns> public List <GameInfo> GetOngoingGames() { List <GameInfo> gamesList = new List <GameInfo>(); using (var ctx = new FIARDBContext()) { var games = (from g in ctx.Games where g.GameOver == false select g).ToList(); foreach (var g in games) { gamesList.Add(new GameInfo(g)); } return(gamesList); } }
/// <summary> /// returns all games going on and ended between given to players /// </summary> /// <param name="player1"></param> /// <param name="player2"></param> /// <returns></returns> public List <GameInfo> GetPlayersGames(string player1, string player2) { using (var ctx = new FIARDBContext()) { var games = (from g in ctx.Games where (g.Player1.UserName == player1 && g.Player2.UserName == player2 || g.Player1.UserName == player2 && g.Player2.UserName == player1) select g).ToList(); List <GameInfo> gamesLis = new List <GameInfo>(); foreach (var g in games) { gamesLis.Add(new GameInfo(g)); } return(gamesLis); } }
/// <summary> /// sends available players to clients /// </summary> /// <returns></returns> public List <PlayerInfo> GetAvalibalePlayers() { using (var ctx = new FIARDBContext()) { var players = (from p in ctx.Players where p.Status == 1 select p).ToList(); List <PlayerInfo> pi = new List <PlayerInfo>(); foreach (var player in players) { pi.Add(new PlayerInfo(player)); } SendStatusMessageEx("Call : Get Avalibale Players"); return(pi); } }
private void init(Player player) { id = player.PlayerId; username = player.UserName; status = (Status)player.Status; Wins = 0; Loses = 0; Score = 0; using (var ctx = new FIARDBContext()) { var allGames = (from g in ctx.Games where (g.Player_PlayerId == player.PlayerId || g.PlayedAgainst_PlayerId == player.PlayerId) && g.GameOver == true select g).ToList(); foreach (var game in allGames) { if (game.Player1.UserName == player.UserName) { this.Score += game.Player1Points; if (game.Player1Points > game.Player2Points) { this.Wins++; } else { this.Loses++; } } else { this.Score += game.Player2Points; if (game.Player2Points > game.Player1Points) { this.Wins++; } else { this.Loses++; } } } this.Games = allGames.Count; } }
private void init(string username) { using (var ctx = new FIARDBContext()) { var player = (from pl in ctx.Players where pl.UserName == username select pl).ToList(); if (player.Count > 0) { init(player[0]); } else { throw new FaultException <PlayerDoesntExistInDataBase>(new PlayerDoesntExistInDataBase(username)); } } }
private List <string> GenertatePlayedAgainstList() { using (var ctx = new FIARDBContext()) { var allGames = (from g in ctx.Games where (g.Player_PlayerId == this.id || g.PlayedAgainst_PlayerId == this.id) && g.GameOver == true select g).ToList(); var playedAgainst = new List <string>(); foreach (var game in allGames) { var gi = new GameInfo(game); playedAgainst.Add(gi.getPlayerStats(id)); } return(playedAgainst); } }
/// <summary> /// cauclates the points of each the players updates the database according the winner or draw /// </summary> /// <param name="player"></param> private void EndGame(string player) // draw or the player made move won { if (player == null) // its a draw { using (var ctx = new FIARDBContext()) { var game = (from g in ctx.Games where g.GameId == this.game.GameId select g).FirstOrDefault(); game.GameOver = true; game.Winner_PlayerId = null; game.Player2Points = calcLoserPoints(player2.username) + checkIfAllCollsFilled(player2.username); game.Player1Points = calcLoserPoints(player1.username) + checkIfAllCollsFilled(player1.username); ctx.SaveChanges(); } } else // there is a winner! { using (var ctx = new FIARDBContext()) { var game = (from g in ctx.Games where g.GameId == this.game.GameId select g).FirstOrDefault(); game.GameOver = true; if (player == player1.username) { game.Winner_PlayerId = player1.id; game.Player1Points = 1000 + checkIfAllCollsFilled(player1.username); game.Player2Points = calcLoserPoints(player2.username) + checkIfAllCollsFilled(player1.username); } else { game.Winner_PlayerId = player2.id; game.Player2Points = 1000 + checkIfAllCollsFilled(player2.username); game.Player1Points = calcLoserPoints(player1.username) + checkIfAllCollsFilled(player1.username); } ctx.SaveChanges(); } } }
/// <summary> /// creates game of given players in database and in host /// </summary> /// <param name="player1"></param> /// <param name="player2"></param> public GameBoard(PlayerInfo player1, PlayerInfo player2) { this.player1 = player1; this.player2 = player2; player1.Status = Status.Playing; player2.Status = Status.Playing; board = new PlayerColor[7, 6]; turnPlayer1 = true; using (var ctx = new FIARDBContext()) { var g = new Game(); g.Player_PlayerId = player1.id; g.PlayedAgainst_PlayerId = player2.id; g.GameStart = DateTime.Now; ctx.Games.Add(g); ctx.SaveChanges(); game = g; } }
/// <summary> /// function for client to call to register the player to database /// if the username already exists will throw fault /// </summary> /// <param name="username"></param> /// <param name="pass"></param> public void RegisterPlayer(string username, string pass) { try { using (var ctx = new FIARDBContext()) { var player = (from p in ctx.Players where p.UserName == username select p).FirstOrDefault(); if (player == null) { ctx.Players.Add(new Player { UserName = username, Pass = pass }); ctx.SaveChanges(); } else { var f = new PlayerAlreadyExistsInDataBase(); SendStatusMessageEx(f.Details); throw new FaultException <PlayerAlreadyExistsInDataBase>(f); } } } catch (FaultException ex) { throw ex; } catch (Exception ex) { SendStatusMessageEx(ex.Message); throw new FaultException(ex.Message); } }