예제 #1
0
        private void updatePointWinner(string player, char p)
        {
            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                var UserWin = (from u in ctx.Users
                               where u.UserName == player
                               select u).FirstOrDefault();
                var WinGamePoint = (from g in ctx.SingleGames
                                    where g.Player1_UserName == player & g.Status == true
                                    select g).FirstOrDefault();

                if (checkInCol(p))
                {
                    UserWin.Points += 1100;
                    poin            = 1100;
                }
                else
                {
                    UserWin.Points += 1000;
                    poin            = 1000;
                }
                UserWin.NumOfGames    += 1;
                UserWin.NumOfWins     += 1;
                WinGamePoint.Winner    = player;
                WinGamePoint.GamePoint = poin;
                WinGamePoint.Status    = false;
                ctx.SaveChanges();
            }
        }
예제 #2
0
        public void Register(string name, string pass)
        {
            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                var IsExists = (from u in ctx.Users
                                where u.UserName == name
                                select u).FirstOrDefault();
                if (IsExists != null)
                {
                    ConnectedFault userNameTaken = new ConnectedFault
                    {
                        Details = name + " is taken, please pick another."
                    };
                    throw new FaultException <ConnectedFault>(userNameTaken);
                }
                User newUser = new User
                {
                    UserName       = name,
                    HashedPassword = pass,
                    NumOfGames     = 0,
                    NumOfLosses    = 0,
                    NumOfWins      = 0,
                    Points         = 0
                };
                ctx.Users.Add(newUser);
                ctx.SaveChanges();

                ICallback regCallback = OperationContext.Current.GetCallbackChannel <ICallback>();
                updateAllClinetToUpdateList(name);
                avilableClinets.Add(name, regCallback);
            }
        }
예제 #3
0
 public List <string> gameDataBetween(string Player1, string Player2)
 {
     using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
     {
         List <string> dataBetween = new List <string>();
         var           match       = (from g in ctx.SingleGames
                                      where (((g.Player1_UserName == Player1 && g.Player2_UserName == Player2) ||
                                              (g.Player1_UserName == Player2 && g.Player2_UserName == Player1)) &&
                                             g.Status == false)
                                      select g).ToList();
         if (match.Count == 0)
         {
             return(dataBetween);
         }
         dataBetween.Add(percentageOfWins(match, Player1).ToString());
         dataBetween.Add(percentageOfWins(match, Player2).ToString());
         foreach (var game in match)
         {
             dataBetween.Add(
                 $"Game ID: {game.Id.ToString()}\n" +
                 $"Date: {game.Date.ToString()}\n" +
                 $"Players: {game.Player1_UserName} vs. {game.Player2_UserName}\n" +
                 $"♛{game.Winner} WON! With {game.GamePoint.ToString()} points!\n" +
                 $"▁ ▂ ღ(¯`◕‿◕´¯)(¯`◕‿◕´¯)ღ ▂ ▁"
                 );
         }
         return(dataBetween);
     }
 }
예제 #4
0
 public List <string> createPlayerData()
 {
     using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
     {
         var userData = (from u in ctx.Users
                         select u.UserName).ToList();
         return(userData);
     }
 }
예제 #5
0
        private void updatePointLose(string player, char p)
        {
            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                var UserLose = (from u in ctx.Users
                                where u.UserName == player
                                select u).FirstOrDefault();

                if (checkInCol(p))
                {
                    UserLose.Points += 100;
                }
                UserLose.Points      += (10 * cntSquare(p));
                UserLose.NumOfGames  += 1;
                UserLose.NumOfLosses += 1;
                ctx.SaveChanges();
            }
        }
예제 #6
0
 public Dictionary <string, string> userData(string name)
 {
     using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
     {
         Dictionary <string, string> userData = new Dictionary <string, string>();
         var userStats = (from u in ctx.Users
                          where u.UserName == name
                          select u).FirstOrDefault();
         if (userStats == null)
         {
             return(userData);
         }
         userData.Add("User", userStats.UserName);
         userData.Add("Games", userStats.NumOfGames.ToString());
         userData.Add("Wins", userStats.NumOfWins.ToString());
         userData.Add("Losses", userStats.NumOfLosses.ToString());
         userData.Add("Points", userStats.Points.ToString());
         return(userData);
     }
 }
예제 #7
0
        public List <string> getSortedList(string sortBy)
        {
            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                switch (sortBy)
                {
                case "Username":
                    var byUsername = (from u in ctx.Users
                                      orderby u.UserName ascending
                                      select u.UserName).ToList();
                    return(byUsername);

                case "Number of Games":
                    var byNumOfGames = (from u in ctx.Users
                                        orderby u.NumOfGames descending
                                        select u).ToList();
                    return(resultToString(byNumOfGames, sortBy));

                case "Number of Wins":
                    var byNumOfWins = (from u in ctx.Users
                                       orderby u.NumOfWins descending
                                       select u).ToList();
                    return(resultToString(byNumOfWins, sortBy));

                case "Number of Losses":
                    var byNumOfLooses = (from u in ctx.Users
                                         orderby u.NumOfLosses descending
                                         select u).ToList();
                    return(resultToString(byNumOfLooses, sortBy));

                case "Number of Points":
                    var byNumOfPoints = (from u in ctx.Users
                                         orderby u.Points descending
                                         select u).ToList();
                    return(resultToString(byNumOfPoints, sortBy));

                default:
                    return(null);
                }
            }
        }
예제 #8
0
 public List <string> liveGamesList()
 {
     using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
     {
         List <string> liveGamesData = new List <string>();
         var           LiveGames     = (from g in ctx.SingleGames
                                        where g.Status == true
                                        select g).ToList();
         if (LiveGames.Count == 0)
         {
             return(liveGamesData);
         }
         foreach (var game in LiveGames)
         {
             liveGamesData.Add(
                 $"Start Time: {game.Date.ToString()}\n" +
                 $"Players: {game.Player1_UserName} vs. {game.Player2_UserName}\n"
                 );
         }
         return(liveGamesData);
     }
 }
예제 #9
0
 public void SingIn(string user, string pass)
 {
     if (avilableClinets.ContainsKey(user))
     {
         ConnectedFault userExsists = new ConnectedFault
         {
             Details = "User name " + user + " already exists. Try something else"
         };
         throw new FaultException <ConnectedFault>(userExsists);
     }
     using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
     {
         var findUser = (from u in ctx.Users
                         where u.UserName == user
                         select u).FirstOrDefault();
         if (findUser == null)
         {
             UnregisteredUser userNotExsists = new UnregisteredUser
             {
                 Details = user + "does not exist in the database. Please register."
             };
             throw new FaultException <UnregisteredUser>(userNotExsists);
         }
         else if (pass != findUser.HashedPassword)
         {
             WrongPassword userWrongPassword = new WrongPassword
             {
                 Details = "Wrong password entered, please try again"
             };
             throw new FaultException <WrongPassword>(userWrongPassword);
         }
         else
         {
             ICallback singIncallback = OperationContext.Current.GetCallbackChannel <ICallback>();
             updateAllClinetToUpdateList(user);
             avilableClinets.Add(user, singIncallback);
         }
     }
 }
예제 #10
0
        public void Disconnect(string player)
        {
            //remove from avilable clinet
            avilableClinets.Remove(player);
            //if is exit from game remove the game
            if (this.games.ContainsKey(player))
            {
                this.games.Remove(player);
            }
            //notify all other client that is disconnected
            foreach (var callBack in avilableClinets.Values)
            {
                Thread updateOtherPlayerThread = new Thread(() =>
                {
                    callBack.OtherPlayerDisconnected(player);
                }
                                                            );
                updateOtherPlayerThread.Start();
            }

            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                List <string> PlayerGames = new List <string>();
                var           UpdatStatus = (from g in ctx.SingleGames
                                             where g.Player1_UserName == player || g.Player2_UserName == player & g.Status == true
                                             select g).ToList();
                if (PlayerGames.Count == 0)
                {
                    return;
                }
                foreach (var ga in UpdatStatus)
                {
                    ga.Status = false;
                    ctx.SaveChanges();
                }
                ctx.SaveChanges();
            }
        }
예제 #11
0
        public List <string> gamesHistory()
        {
            List <string> gamesHistory = new List <string>();

            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                var GamesHistory = (from g in ctx.SingleGames
                                    where g.GamePoint != 0 && g.Status == false
                                    select g).ToList();

                foreach (var game in GamesHistory)
                {
                    gamesHistory.Add(
                        $"Game ID: {game.Id.ToString()}\n" +
                        $"Date: {game.Date.ToString()}\n" +
                        $"Players: {game.Player1_UserName} vs. {game.Player2_UserName}\n" +
                        $"♛{game.Winner} WON! With {game.GamePoint.ToString()} points!\n" +
                        $"▁ ▂ ღ(¯`◕‿◕´¯)(¯`◕‿◕´¯)ღ ▂ ▁"
                        );
                }
                return(gamesHistory);
            }
        }
예제 #12
0
        public void StartGameBetweenPlayers(string p1, string p2)
        {
            this.avilableClinets[p2].StartGameUser(p1);
            GameZone gameZone = new GameZone(p1, p2, this.avilableClinets[p1], this.avilableClinets[p2]);

            games.Add(p1, gameZone);
            games.Add(p2, gameZone);
            using (var ctx = new fourinrowDB_RoniShoseov_EilonOsherContext())
            {
                DateTime localTime = DateTime.Now;

                SingleGame newGame = new SingleGame
                {
                    Date             = localTime,
                    Player1_UserName = p1,
                    Player2_UserName = p2,
                    GamePoint        = 0,
                    Status           = true
                };
                ctx.SingleGames.Add(newGame);
                ctx.SaveChanges();
            }
            updateAllOtherUserToUpdateList(p1, p2);
        }