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