Example #1
0
        /// <summary>
        /// Finds the game by client.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <returns>GameMultiPlayer</returns>
        public GameMultiPlayer FindGameByClient(TcpClient client)
        {
            GameMultiPlayer game = null;

            modelData.mutexGamePlaying.WaitOne();
            // Over on GameWating dictionary.
            foreach (GameMultiPlayer value in modelData.GameWating.Values)
            {
                // Check if the client exist.
                if (value.GetClient1() == client || value.GetClient2() == client)
                {
                    modelData.mutexGamePlaying.ReleaseMutex();
                    return(value);
                }
            }
            // Over on GamesPlaying dictionary.
            foreach (GameMultiPlayer value in modelData.GamesPlaying.Values)
            {
                // Check if the client exist.
                if (value.GetClient1() == client || value.GetClient2() == client)
                {
                    modelData.mutexGamePlaying.ReleaseMutex();
                    return(value);
                }
            }
            modelData.mutexGamePlaying.ReleaseMutex();
            return(game);
        }
Example #2
0
        /// <summary>
        /// Execute the specified args and client.
        /// </summary>
        /// <returns>The execute.</returns>
        /// <param name="args">Arguments.</param>
        /// <param name="client">Client.</param>
        public string Execute(string[] args, TcpClient client)
        {
            if (!this.CheckValid(args, client))
            {
                return("singlePlayer");
            }
            model.GetmodelData().mutexGamePlaying.WaitOne();
            model.GetmodelData().mutexGameWating.WaitOne();
            string name = args[0];
            int    rows = int.Parse(args[1]);
            int    cols = int.Parse(args[2]);
            // get the game from the model.
            GameMultiPlayer game = model.GenerateGame(name, rows, cols, client);

            model.GetmodelData().mutexGamePlaying.ReleaseMutex();
            model.GetmodelData().mutexGameWating.ReleaseMutex();
            if (game != null)
            {
                return("multiPlayer");
            }
            else
            {
                Controller.NestedErrors nested = new Controller.NestedErrors("Error exist game", client);
                return("singlePlayer");
            }
        }
Example #3
0
        public string Execute(string[] args, TcpClient client)
        {
            if (!CheckValid(args, client))
            {
                return("multiPlayer");
            }
            string direction = args[0];
            // Get the game of the client who press play.
            GameMultiPlayer game = model.FindGameByClient(client);

            // Check the direction.
            if (!directions.Contains(direction))
            {
                Controller.NestedErrors error = new Controller.NestedErrors("The dirction is incorrect", client);
                return("multiPlayer");
            }
            // Check if the game exist.
            if (game != null)
            {
                NestedPlay nested = new NestedPlay(game.GetMaze().Name, direction);
                Controller.SendToClient(JsonConvert.SerializeObject(nested), game.OtherClient(client));
            }
            else
            {
                // The game dosnt exits. Send message to the client.
                Controller.NestedErrors error = new Controller.NestedErrors("you need to start a game", client);
            }
            return("multiPlayer");
        }
Example #4
0
        /// <summary>
        /// Close the multi players game.
        /// </summary>
        /// <param name="args">The arguments.</param>
        /// <param name="client">The client.</param>
        /// <returns>
        /// string: "singlePlayer" or "multiPlayer".
        /// </returns>
        public string Execute(string[] args, TcpClient client)
        {
            // Check the valid if the arguements.
            if (!this.CheckValid(args, client))
            {
                return("multiPlayer");
            }
            string          name = args[0];
            GameMultiPlayer game = model.FindGamePlaying(name);

            // Check if the game is in the list of games to play.
            if (game != null)
            {
                model.RemoveGamePlaying(name);
                Controller.SendToClient("close client do close", client);
                Controller.SendToClient("close the game by other client", game.OtherClient(client));
                if (!model.ClientOnGame(game.OtherClient(client)))
                {
                    Controller.SendToClient("singlePlayer", game.OtherClient(client));
                }
                if (!model.ClientOnGame(client))
                {
                    return("singlePlayer");
                }
                return("multiPlayer");
            }
            else
            {
                Controller.NestedErrors nested = new Controller.NestedErrors("Error exist game", client);
                return("multiPlayer");
            }
        }
Example #5
0
        public string Execute(string[] args, TcpClient client)
        {
            if (!this.CheckValid(args, client))
            {
                return("multiPlayer");
            }
            string name = args[0];
            int    rows = int.Parse(args[1]);
            int    cols = int.Parse(args[2]);
            // Get the game from the model.
            GameMultiPlayer game = model.GenerateGame(name, rows, cols, client);

            if (game == null)
            {
                Controller.NestedErrors nested = new Controller.NestedErrors("Error exist game", client);
            }
            return("multiPlayer");
        }
Example #6
0
        /// <summary>
        /// Generates the game.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="rows">The rows.</param>
        /// <param name="cols">The cols.</param>
        /// <param name="client1">The client1.</param>
        /// <returns>GameMultiPlayer</returns>
        public GameMultiPlayer GenerateGame(string name, int rows, int cols, TcpClient client1)
        {
            IMazeGenerator  newMaze = new DFSMazeGenerator();
            Maze            maze;
            GameMultiPlayer game = null;

            // Check if the game is on the list of wating or playing games.
            if (!modelData.GameWating.ContainsKey(name) &&
                !modelData.GamesPlaying.ContainsKey(name))
            {
                // Generate maze.
                maze      = newMaze.Generate(rows, cols);
                maze.Name = name;
                // Generate the game.
                game = new GameMultiPlayer(maze, client1);
                modelData.GameWating.Add(name, game);
            }
            return(game);
        }
Example #7
0
        /// <summary>
        /// Execute the specified args and client.
        /// </summary>
        /// <returns>The execute.</returns>
        /// <param name="args">Arguments.</param>
        /// <param name="client">Client.</param>
        public string Execute(string[] args, TcpClient client)
        {
            string          direction = args[0];
            GameMultiPlayer game      = model.FindGameByClient(client);

            if (!directions.Contains(direction))
            {
                Controller.NestedErrors error = new Controller.NestedErrors("The dirction is incorrect}", client);
                return("multiPlayer");
            }
            if (game != null)
            {
                NestedPlay nested = new NestedPlay(game.GetMaze().Name, direction);
                Controller.SendToClient(JsonConvert.SerializeObject(nested), game.OtherClient(client));
                return("multiPlayer");
            }
            else
            {
                Controller.SendToClient("{Erorr: you need to start a game}", client);
                return("singlePlayer");
            }
        }
Example #8
0
        /// <summary>
        /// Finds the game by client.
        /// </summary>
        /// <param name="client">The client.</param>
        /// <returns>GameMultiPlayer</returns>
        public GameMultiPlayer FindGameByClient(TcpClient client)
        {
            GameMultiPlayer game = null;

            // Over on GameWating dictionary.
            foreach (GameMultiPlayer value in modelData.GameWating.Values)
            {
                // Check if the client exist.
                if (value.GetClient1() == client || value.GetClient2() == client)
                {
                    game = value;
                }
            }
            // Over on GamesPlaying dictionary.
            foreach (GameMultiPlayer value in modelData.GamesPlaying.Values)
            {
                // Check if the client exist.
                if (value.GetClient1() == client || value.GetClient2() == client)
                {
                    game = value;
                }
            }
            return(game);
        }
Example #9
0
 /// <summary>
 /// Adds the game playing.
 /// </summary>
 /// <param name="name">The name.</param>
 /// <param name="game">The game.</param>
 public void AddGamePlaying(string name, GameMultiPlayer game)
 {
     modelData.GamesPlaying.Add(name, game);
 }