Exemplo n.º 1
0
        /// <summary>
        /// Handelt de bericht die uit de server komt.
        /// </summary>
        /// <param name="message">het bericht die uit de server komt.</param>
        /// <param name="socket">De client.</param>
        public override void ProcessStream(string message, Socket socket)
        {
            // [0] is altijd de event.
            // [1] De naam van de speler.
            // [2] Het berichtje.
            // [3] De naam van de tegen speler.
            string[] opgeknipt = message.Split(new char[] { '%' });

            // Change this string to event.
            Events events = EnumHelperl.EnumConvert <Events>(opgeknipt[0]);

            switch (events)
            {
            // Het spel is gecreeerd.
            case Events.GecreeerdSpel:
                Thread.Sleep(1000);
                Console.WriteLine();
                Console.WriteLine("Je moet op een speler wachten.");
                break;

            case Events.SpelerInvoegde:
                Console.WriteLine();
                Thread.Sleep(1000);
                Console.WriteLine("Nu mag je je teken kiezen.");
                Console.WriteLine();
                string teken = this.VraagOmEigenTekenTeKiezen();
                this.ZetTekenCommando(teken);
                break;

            case Events.TekenIngezet:
                this.StartHetSpelCommando();
                break;

            case Events.TegenSpelerHeeftTekenIngezet:
                Console.WriteLine();
                Console.WriteLine($"De tegenspeler heeft {opgeknipt[2]} gekozen");
                Console.WriteLine();
                Console.Write($"Jij gaat");
                ColorConsole.Write(ConsoleColor.Red, $" {opgeknipt[4]}");
                Console.WriteLine(" gbruiken.");
                Thread.Sleep(500);
                break;

            case Events.NaamVeranderd:
                Console.WriteLine();
                Console.WriteLine("Omdat je tegenspeler dezelfde naam heeft, wordt je naam automatisch verandert.");
                Console.Write($"Je nieuwe naam is: ");
                ColorConsole.WriteLine(ConsoleColor.Green, $"{opgeknipt[1]}");
                break;

            case Events.Gestart:
                Console.WriteLine();
                Thread.Sleep(1000);
                ColorConsole.WriteLine(ConsoleColor.Green, "Na twee seconden wordt het spel gestart.");
                Thread.Sleep(2000);
                break;

            case Events.BordGetekend:
                Console.Clear();
                Thread.Sleep(500);
                Console.WriteLine();
                Console.WriteLine($"{opgeknipt[2]}");
                break;

            case Events.JeRol:
                Console.WriteLine();
                int inzet = this.Doezet();
                if (inzet > 0 || inzet <= this.dimension)
                {
                    this.DoeZetCommando(inzet);
                }

                break;

            case Events.OngeldigInzet:
                Console.WriteLine();
                Console.WriteLine("Deze kolom is vol. Je mag een andere kolom kiezen.");
                inzet = this.Doezet();
                if (inzet > 0 || inzet <= this.dimension)
                {
                    this.DoeZetCommando(inzet);
                }

                break;

            case Events.Wachten:
                Console.WriteLine();
                Console.WriteLine($"{opgeknipt[3]} is aan het spelen. je moet op hem/haar nu wachten.");
                break;

            case Events.HeeftGewonnen:
            case Events.HetBordVolGeworden:
                if (events == Events.HeeftGewonnen)
                {
                    Console.WriteLine();
                    Console.WriteLine($"{opgeknipt[1]}: je hebt gewonnen.");
                }
                else if (events == Events.HetBordVolGeworden)
                {
                    Console.WriteLine();
                    Console.WriteLine("Het speelvlak is vol.");
                }

                break;

            case Events.SpelGevonden:
                Console.WriteLine();
                Console.WriteLine("Er is een spel gevonden.");
                break;

            case Events.HeeftGewonnenTegenSpeler:
                Console.WriteLine();
                Console.WriteLine($"{opgeknipt[3]} heeft gewonnen.");
                Thread.Sleep(1000);
                if (opgeknipt[3] == "Computer")
                {
                    this.UitVoerNieuwRonde();
                }
                else
                {
                    Console.WriteLine("Wacht op hem/haar.");
                }

                break;

            case Events.WachtOPReactie:
                Console.WriteLine();
                Console.WriteLine("Wacht op hem/haar.");
                break;

            case Events.TegenSpelerVerlaten:
                Console.Clear();
                Console.WriteLine();
                Console.WriteLine("De andere speler heeft het spel verlaten.");
                if (this.WilNieuweSpel())
                {
                    this.NieuweSpel();
                }
                else
                {
                    this.DichtHetWindow();
                }

                break;

            case Events.SpelGestopt:
                Console.WriteLine();
                this.UitVoerNieuwRonde();
                break;

            case Events.WachtenNieuweSpeler:
                Console.WriteLine();
                Console.WriteLine("Je moet op een nieuwe Speler wachten.");

                break;

            case Events.SpelVerwijderd:
                Console.WriteLine();
                Console.WriteLine("Het spel is gestopt!");
                Console.WriteLine("De speler heeft het spel verlaten. Het spel wordt verwijderd.");
                if (this.WilNieuweSpel())
                {
                    this.NieuweSpel();
                }
                else
                {
                    this.DichtHetWindow();
                }

                break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// behanelt het berichtje die uit een cleint wordt gestuurd.
        /// </summary>
        /// <param name="message">De bericht.</param>
        /// <param name="socket">De client.</param>
        public override void ProcessStream(string message, Socket socket)
        {
            try
            {
                if (message == string.Empty)
                {
                    throw new ArgumentException("Mag niet message empty zijn.");
                }

                if (socket == null)
                {
                    throw new ArgumentException("Mag niet een client null zijn.");
                }

                Game game;

                // [0] is altijd de commando.
                // [1.....] is de rest van de bericht.
                string[] opgeknipt = message.Split(new char[] { '%' });

                // change the string to enum.
                Commandos commando = EnumHelperl.EnumConvert <Commandos>(opgeknipt[0]);
                switch (commando)
                {
                case Commandos.VerzoekTotDeelnemenSpel:

                    this.Send(socket, this.handler.StreamOntvanger(message, socket));
                    break;

                // Geef een teken aan een speler.
                // en geef de andere speler de andere teken.
                case Commandos.ZetTeken:
                    string msg   = string.Empty;
                    Teken  teken = EnumHelperl.EnumConvert <Teken>(opgeknipt[1].ToString());
                    game = this.GetGame(socket);
                    game.TekenenBehandl(socket, teken);
                    msg = $"{Events.TegenSpelerHeeftTekenIngezet.ToString()}%%{opgeknipt[1]}%%{game.TegenSpeler(game.GetSpelerViaTcp(socket)).GebruikTeken.ToString()}";
                    this.SendBerichtNaarDeTegenSpeler(game, msg, socket);
                    Thread.Sleep(1000);
                    this.Send(socket, Events.TekenIngezet.ToString());
                    break;

                // start het spel.
                case Commandos.Starten:
                    this.GetGame(socket).StartHetSpel();
                    break;

                // doe zet op het speelvlak.
                case Commandos.DoeZet:
                    game = this.GetGame(socket);
                    if (game != null)
                    {
                        // eerst gaat het spel de inzet van de speler zetten.
                        // dan gaat de controller dat nummertje uit de properties speler op halen.
                        game.DoeInzet(opgeknipt[1], socket);
                        Speler speler = game.GetSpelerViaTcp(socket);
                        game.GameController.DoeInzet(speler);
                    }

                    break;

                case Commandos.NieuwRonde:
                    game = this.GetGame(socket);
                    if (game != null)
                    {
                        // Als de speler een nieuw rondje wil doen.
                        // Er staat alleen een speler dan de situatie verandert tot wachten op andere speler.
                        if (game.GetSpelers().Count == 1)
                        {
                            game.ZetSituatie(Status.Wachten);
                            Thread.Sleep(500);
                            this.SendBerichtNaarDeTegenSpeler(game, Events.WachtenNieuweSpeler.ToString(), socket);
                        }
                        else
                        {
                            // Als het spel twee spelers heeft dan gaat het door.
                            game.GameController.NieuwRonde();
                        }
                    }

                    break;

                case Commandos.WilNietNieuweRonde:
                    // neem de game.
                    game = this.GetGame(socket);
                    if (game != null)
                    {
                        this.VerWijdertHetSpelMetSpeller(socket);
                    }

                    socket.Close();
                    this.clienten.Remove(socket);
                    break;
                }
            }
            catch (Exception e)
            {
                throw new ArgumentException(e.Message);
            }
        }