/// <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)); } }