Ejemplo n.º 1
0
 /// <summary>
 /// Locked de thread tot er een verbinding is
 /// </summary>
 /// <param name="port">De poort waar de server naar moet verbinden</param>
 /// <returns>Of er een verbinding is</returns>
 private static void Server_internal(int port)
 {
     Cancel = false;
     NetServer.Start(ServerConnect, ServerDisconnect, port, PacketSize);
     while (!NetServer.Listener.Pending())
     {
         Thread.Sleep(100);
         if (Cancel == true)
         {
             return;
         }
     }
     NetServer.NextClient();
 }
        /// <summary>
        /// Wacht op een klikkaart packet van de andere speler
        /// Als die gekregen is voert hij de logica uit die nodig is
        /// </summary>
        public static void KlaarVoorVolgendeKlikkaart()
        {
            //Als deze speler niet aan de beurt is
            if ((Host ? 1 : 2) != BaseGame.SpelerAanBeurt)    // ((Host ? 1 : 2) als de host true is dan 1 zo niet dan 2
            //Wacht op klik kaart packets van andere kant
            {
                BackgroundWorker b = new BackgroundWorker();

                //Wordt op tweede thread gerunned
                b.DoWork += delegate(object o, DoWorkEventArgs args) {   //doe dit op achtergrond  (delegate is mini method in method)
                    BackgroundWorker bw = o as BackgroundWorker;
                    object[]         packet;
                    if (Host)
                    {
                        packet = Utils.StringToArray(NetServer.ReceiveMessage()) as object[];
                    }
                    else
                    {
                        packet = Utils.StringToArray(NetClient.ReceiveMessage()) as object[];
                    }
                    args.Result = packet;
                };

                //Als er een bericht is binnen gekomen
                b.RunWorkerCompleted += delegate(object o, RunWorkerCompletedEventArgs args) {  //achtergrond shit is klaar
                    object[] packet = (object[])args.Result;
                    //Is het een klik kaart, of een volgende beurt packet?
                    if (((string)packet[0]) == "klikkaart")
                    {
                        //Update speelveld
                        BaseGame.KaartKlik((int)packet[1], (int)packet[2], false);
                    }
                    else if (((string)packet[0]) == "volgendebeurt")
                    {
                        //Zet speler aan beurt goed
                        BaseGame.SpelerAanBeurt = (int)packet[1];
                    }

                    //Klaar voor volgende beurt
                    if (BaseGame.Gamestate == 1)
                    {
                        KlaarVoorVolgendeKlikkaart();
                    }
                };
                b.RunWorkerAsync();
            }
        }
        /// <summary>
        /// deze methode wisselt de beurt van de spelers als 2 getrokken kaarten niet gelijk aan elkaar zijn.
        /// de client of de host sturen het volgendebeurt packet (hangt er van af wie aan de beurt was) de ander luistert.
        ///
        /// </summary>
        public static void VolgendeBeurt()
        {
            //Als de kaarten niet gelijk zijn is volgende aan beurt
            if (BaseGame.Speelveld_types[BaseGame.Kaart1x, BaseGame.Kaart1y] != BaseGame.Speelveld_types[BaseGame.Kaart2x, BaseGame.Kaart2y])
            {
                //Coole syntax om speler aan beurt te switchen tussen 1 en 2
                BaseGame.SpelerAanBeurt = BaseGame.SpelerAanBeurt == 1 ? 2 : 1;  //1 ? 2 : 1 als het 1 is word het 2, als het 2 is word het 1.
            }

            //Stuur volgendebeurt packet
            object[] volgendebeurt = new object[2];
            volgendebeurt[0] = "volgendebeurt";
            volgendebeurt[1] = BaseGame.SpelerAanBeurt;
            if (Host)
            {
                NetServer.SendMessage(Utils.ArrayToString(volgendebeurt));
            }
            else
            {
                NetClient.SendMessage(Utils.ArrayToString(volgendebeurt));
            }
        }