/// <summary> /// Handles the server responses. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="ResponseEventArgs"/> instance containing the event data.</param> private void ServerResponseHandler(object sender, ResponseEventArgs args) { // server disconnected if (args.Response == null) { this.isConnected = false; return; } IServerAnswer answer = this.answersFactory.GetJsonAnswer(args.Response); switch ((answer as ServerAnswer).Type) { case 1: // the server has responded with a new generated maze this.singlePlayerMaze = new SinglePlayerMaze((answer as ServerAnswer).Content as GenerateAnswer, rows, cols); this.server.SendRequest("solve " + this.singlePlayerMaze.Name + " 0"); this.MazeName = this.singlePlayerMaze.Name; this.MazeString = this.singlePlayerMaze.Maze; this.PlayerPosition = this.singlePlayerMaze.PlayerPosition; this.WonGame = false; break; case 2: if (this.singlePlayerMaze != null) { // server has return the solution to the maze this.singlePlayerMaze.Solution = ((answer as ServerAnswer).Content as SolveAnswer).Maze; } break; } }
/// <summary> /// Generates a json answer. /// </summary> /// <param name="type">The type.</param> /// <param name="ans">The answer.</param> /// <returns> /// json serialization of the class. /// </returns> public string GetJSONAnswer(int type, IServerAnswer ans) { JavaScriptSerializer serializer = new JavaScriptSerializer(); this.type = type; this.data = ans; return(serializer.Serialize(this)); }
/// <summary> /// Handles the server respones. /// </summary> /// <param name="sender">The sender.</param> /// <param name="args">The <see cref="ResponseEventArgs"/> instance containing the event data.</param> private void ServerResponseHandler(object sender, ResponseEventArgs args) { // server disconnected if (args.Response == null) { this.isConnected = false; return; } IServerAnswer answer = this.answersFactory.GetJsonAnswer(args.Response); switch ((answer as ServerAnswer).Type) { // received response with a solved maze case 2: if (this.multiPlayerMaze != null) { this.multiPlayerMaze.PlayerSolution = ((answer as ServerAnswer).Content as SolveAnswer).Maze; } break; // received response with multiplayer data case 3: this.multiPlayerMaze = new MultiPlayerMaze((answer as ServerAnswer).Content as MultiplayerAnswer, rows, cols, this.server); // request solution this.server.SendRequest("solve " + this.multiPlayerMaze.PlayerMazeName + " 0"); // set the data this.PlayerMazeName = this.multiPlayerMaze.PlayerMazeName; this.PlayerMazeString = this.multiPlayerMaze.PlayerMaze; this.PlayerPosition = this.multiPlayerMaze.PlayerPosition; this.OpponentMazeName = this.multiPlayerMaze.OpponentMazeName; this.OpponentMazeString = this.multiPlayerMaze.OpponentMaze; this.OpponentPosition = this.multiPlayerMaze.OpponentPosition; this.PlayerWonGame = false; this.OpponentWonGame = false; break; // received response with move data case 4: PlayAnswer playAns = (answer as ServerAnswer).Content as PlayAnswer; if (playAns != null) { // capitalize first letter of move direction for enum string playMove = char.ToUpper(playAns.Move[0]) + playAns.Move.Substring(1); var content = (Move)Enum.Parse(typeof(Move), playMove); // move opponent accordingly switch (content) { case Move.Up: this.multiPlayerMaze.OpponentPosition.Row -= 2; break; case Move.Down: this.multiPlayerMaze.OpponentPosition.Row += 2; break; case Move.Left: this.multiPlayerMaze.OpponentPosition.Col -= 2; break; case Move.Right: this.multiPlayerMaze.OpponentPosition.Col += 2; break; default: break; } // notify of movement this.NotifyPropertyChanged(PlayerType.Opponent, "PlayerPosition"); this.NotifyPropertyChanged(PlayerType.Opponent, "WonGame"); this.NotifyPropertyChanged(PlayerType.Opponent, "LostGame"); } break; } }