/// <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;
            }
        }
Exemple #2
0
        /// <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;
            }
        }