public void doWork() { //fait une connexion a la BD et l'ouvre acces = new AccesBD(); acces.Connection(); acces.Open(); //tant que le joueur ne veut pas se déconnecter while (!Deconnection) { //si ce n'est pas la partie if (!partieCommencer) { //on recois le message et on le traite string message = recevoirResultat(Moi.sckJoueur); string[] data = message.Split(new char[] { ',' }); TraiterMessageAvantPartie(data); } else { //si ce n'est pas le début if (Debut) { AvantMatch(); } //si c'est mon tour if (Moi.Depart) { //on ferme le thread qui vérifie si je veut partir si il est ouvert if (t != null && t.IsAlive) { t.Abort(); } //on fait notre tour Tour(); } else { //je crée un thread pour vérifier si l'ennemis envoye un message pour quitter le jeu if (t == null || !t.IsAlive) { t = new Thread(ReceiveMessage.doWork); t.Start(); } else { //s'il recois quelquechose alors on le traite if (ReceiveMessage.message != "") { traiterMessagePartie(ReceiveMessage.message.Split(new char[] { '.' })); ReceiveMessage.message = ""; } } //on vérifie toujours s'il a perdu verifiervictoireEnnemis(); } } } }
//traite les messages avant la partie private void TraiterMessageAvantPartie(string[] data) { switch (data.Length) { case 2: //affiche notre profil if (data[0] == "afficher profil") { sendProfil(data[1]); } //affiche le profil d'un autre joueur else if (data[0] == "afficher profil Joueur") { sendProfil(data[1]); } //si le joueur est présent dans la BD else if (estPresent(data)) { Moi.nom = data[0]; Console.WriteLine("Joueur connecté:" + Moi.nom + " , " + Moi.sckJoueur.RemoteEndPoint.ToString() + " , " + posClient); } break; case 4: //si le joueur n'est pas présent de la BD if (peutEtreAjouter(data)) { Moi.nom = data[0]; ajouterBasicDeck(Moi.nom); Console.WriteLine("Joueur connecté:" + Moi.nom + "," + Moi.sckJoueur.RemoteEndPoint.ToString()); } break; } switch (data[0]) { //le joueur veut se deconnecter case "deconnection": Deconnection = true; Serveur.tabJoueur[posClient] = null; Moi = null; break; case "recevoir Deck": sendDeck(Moi.nom); break; case "trouver partie": //on recois le nom du deck NomDeck = data[1]; int numDeck = acces.getNoDeck(NomDeck); if (numDeck != -1) { //on ferme et ouvre la connexion,car il se peut que la conn manque de ressource et ne renvoie pas toute les cartes Serveur.mutPartie1.WaitOne(); acces.close(); acces.Open(); //on recoisla liste de carte et on le transforme en deck Carte[] CarteJoueur = acces.ListerDeckJoueur(Moi.nom, numDeck); if (CarteJoueur != null && CarteJoueur.Length == 40) { monDeck = new Deck(CarteJoueur); } Serveur.mutPartie1.ReleaseMutex(); } if (startGame(posClient)) { partieCommencer = true; } break; case "RetourMenu": //revenir au menu de connexion Moi.nom = "Joueur"; break; } }