/// <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();
        }
        /// <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!");
            }
        }
示例#3
0
        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);
        }
示例#4
0
        /// <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();
                }
            }
        }
示例#5
0
        /// <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);
     }
 }