Пример #1
0
        /// <summary>
        /// Process van de server.
        /// </summary>
        /// <param name="stream">Stream die uit de client komt.</param>
        /// <param name="client"> Client.</param>
        /// <returns>informatie.</returns>
        /// <exception cref="System.InvalidOperationException">Wordt gegooid wanneer een commando wordt aangeroepen op een ongeldig moment.</exception>
        protected override string ProcessStream(string stream, TcpClient client)
        {
            // bepaal de opdracht
            // de opdracht is het gedeelte in de msg voor de #
            // daarna komen de parameters.
            string commandParams = string.Empty;
            string returnMessage = null;
            GameOX game          = null;

            Commandos commando = CommandoHelper.SplitCommandAndParamsFromMessage(stream, out commandParams);

            /*foreach (GameOX games in this.gameOXen)
             * {
             *  foreach (TcpClient tcp in games.TcpClients)
             *  {
             *      if (tcp == client)
             *      {
             *          game = games;
             *      }
             *  }
             * }*/

            // Add een client to clientLijst.
            try
            {
                switch (commando)
                {
                // Verdeel between de naam van de speler en de dimension van het bord
                // wanneer de commandos is equal VerzoekTotDeelnemenSpel
                case Commandos.VerzoekTotDeelnemenSpel:
                    VerzoekTotDeelnemenSpelCommandHandler handler = new VerzoekTotDeelnemenSpelCommandHandler(this.spelHandler, client);
                    returnMessage = handler.HandleFromMessage(commandParams, out game);
                    if (game.Status == GameOXStatussen.Gestart)
                    {
                        this.ProcessReturnMessage(returnMessage, game.TcpClients);
                        game.Start(client, game);
                    }
                    else
                    {
                        this.ProcessReturnMessage(returnMessage, client);
                    }

                    break;

                case Commandos.SpelTegenComputer:
                    VerzoekTotDeelnemenSpelCommandHandler handlerTegenComputerSpelen = new VerzoekTotDeelnemenSpelCommandHandler(this.spelHandler, client);
                    returnMessage = handlerTegenComputerSpelen.HandleFromMessage(commandParams, out game);
                    this.ProcessReturnMessage(returnMessage, client);

                    game = this.spelHandler.GetGameFromTcpClient(client);
                    game.Start(client, game);
                    break;

                case Commandos.SpelerGestart:
                    game = this.spelHandler.GetGameFromTcpClient(client);
                    Teken teken = TekenHelper.CreateTekenEnum(commandParams);
                    TekenHelper.AddTekenToSpeler(teken, game, client);
                    returnMessage = EventHelper.CreateEvents(Events.YourTurn);
                    this.ProcessReturnMessage(returnMessage, client);

                    // stuur een wacht bericht naar andere speler.
                    returnMessage = this.spelHandler.TegeHuidigeClient(client, game.TcpClients, out this.tegenHuidigeClient);
                    this.ProcessReturnMessage(returnMessage, this.tegenHuidigeClient);
                    break;

                case Commandos.StartSpel:
                    // returnMessage = EventHelper.CreateSpelerGestartEvent();
                    //  ProcessReturnMessage(returnMessage, tcpClients);
                    break;

                case Commandos.DoeZet:
                    // stuur een wacht bericht naar andere speler.
                    returnMessage = this.spelHandler.TegeHuidigeClient(client, game.TcpClients, out this.tegenHuidigeClient);
                    this.ProcessReturnMessage(returnMessage, this.tegenHuidigeClient);
                    short nummer = short.Parse(commandParams);

                    // Handel de info van de speler
                    this.spelHandler.GetGameFromTcpClient(client);
                    game = this.spelHandler.GetGameFromTcpClient(client);
                    game.ChekOfHetValidBeZitIs(client, nummer, game);
                    break;

                case Commandos.WachtenOpAndereDeelnemer:
                    if (game == null)
                    {
                        throw new InvalidOperationException($"Het commando {nameof(Commandos.WachtenOpAndereDeelnemer)} mag niet worden gebruikt wanneer er nog geen game is gestart.");
                    }

                    this.ProcessReturnMessage(returnMessage, game.TcpClients);
                    break;

                case Commandos.NieuwRondje:
                    if (game == null)
                    {
                        throw new InvalidOperationException($"Het commando {nameof(Commandos.WachtenOpAndereDeelnemer)} mag niet worden gebruikt wanneer er nog geen game is gestart.");
                    }

                    this.ProcessReturnMessage(returnMessage, game.TcpClients);
                    break;

                case Commandos.BeeindigSpel:
                    game = this.spelHandler.GetGameFromTcpClient(client);
                    game.StartNieuwRondje(client, game);

                    break;
                }
            }
            catch (Exception exp)
            {
                // ok dan krijg ik een foutmelding, stuur die dan terug
                returnMessage = EventHelper.CreateErrorEvent(exp);
            }

            return(returnMessage);
        }