def initServeur(arguments): """ initialisation du serveur """ # programmation réseaux du socket s=socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) s.bind(('0.0.0.0',6666)) s.listen(1024) (sc, addr) = s.accept() #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key]==True] hv.gs = sc #bonjour extension1 extension2 ... sendcmd('bonjour',listeExtensions) (cmd,args)=recvcmd('bonjour') extensionsSupportees = [] if len(args)>0 : extensionsSupportees = [param for param in args.split(' ') if arguments[param]] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur sendcmd('joueur', arguments["NomJoueur"]) (cmd,args)=recvcmd('joueur') NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... sendcmd('tablier', ' '.join(arguments["tablier"])) (cmd,args) = recvcmd('tablier') hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: (cmd,args)=recvcmd('pileouface') if(cmd == "pileouface"): y = str(uuid4()) t = randint(0,1) x = args sendcmd("pileouface",sha256(' '.join([x,y,t]).encode('utf8')).hexdigest()) (cmd,args)=recvcmd('pileouface') if(cmd == "pileouface"): p = args sendcmd("pileouface",y) if(t != p): hv.monTour = True print("--- C'est moi qui commence.") else: hv.monTour = False print("--- C'est toi qui commence.") else: hv.monTour = False print("--- C'est toi qui commence.") hv.numJoueur = 1 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])
def initClient(arguments): """ initialisation du client """ # programmation réseaux du socket s=socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key]==True] s.connect((arguments["ip"],arguments["port"])) hv.gs = s #bonjour extension1 extension2 ... sendcmd('bonjour', ' '.join(listeExtensions)) (cmd,args)=recvcmd('bonjour') extensionsSupportees = [] if len(args)>0 : extensionsSupportees = [param for param in args.split(' ') if arguments[param]] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur sendcmd('joueur', arguments["NomJoueur"]) (cmd,args)=recvcmd('joueur') NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... sendcmd('tablier', ' '.join(arguments["tablier"])) (cmd,args) = recvcmd('tablier') hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: x = str(uuid4()) p = randint(0,1) sendcmd("pileouface", x) (cmd,args)=recvcmd('pileouface') if(cmd == "pileouface"): sendcmd("pileouface", p) (cmd,args)=recvcmd('pileouface') if(cmd == "pileouface"): y = args if(sha256(' '.join([x,y,t]).encode('utf8')).hexdigest() == sha256(' '.join([x,y,p]).encode('utf8')).hexdigest()): hv.monTour = True print("--- C'est moi qui commence.") else: hv.monTour = False print("--- C'est toi qui commence.") else: hv.monTour = True print("--- C'est moi qui commence.") hv.numJoueur = 2 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])
def CoupAdversaire(gui): #On définit le numéro de l'adversaire, afin de pouvoir jouer son coup. numAdversaire = 0 if hv.numJoueur == 1: numAdversaire = 2 elif hv.numJoueur == 2: numAdversaire = 1 """ traite les commandes et coups de l'adversaire """ # To do ! Vous devez programmer cette fonction. (cmd, arg) = recvcmd("joue", "bravo", "oups", "aurevoir") if (cmd == "bravo"): raise Bravo elif (cmd == "oups"): raise Oups() elif (cmd == "aurevoir"): raise Aurevoir elif (cmd == "joue"): (i, j) = TablierToPlateauCoord(arg) if (hv.monTour == False): if (CoupValide(i, j) == True): if (JouerUnCoup(gui, i, j, numAdversaire) == True): sendcmd("bravo", "") hv.monTour = True else: if (hv.monTour == True): print(">>Ce n'est pas votre tour") else: sendcmd("oups", "")
def initClient(arguments): """ initialisation du client """ # programmation réseaux du socket s=socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key]==True] s.connect((arguments["ip"],arguments["port"])) hv.gs = s #bonjour extension1 extension2 ... sendcmd('bonjour', ' '.join(listeExtensions)) (cmd,args)=recvcmd('bonjour') extensionsSupportees = [] if len(args)>0 : extensionsSupportees = [param for param in args.split(' ') if arguments[param]] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur sendcmd('joueur', arguments["NomJoueur"]) (cmd,args)=recvcmd('joueur') NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... sendcmd('tablier', ' '.join(arguments["tablier"])) (cmd,args) = recvcmd('tablier') hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: # To do ! Pour supporter l'extension pileouface, vous devez implémenter ce morceau de code pass else: hv.monTour = True print("--- C'est moi qui commence.") hv.numJoueur = 2 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])
def CoupAdversaire(gui): """ traite les commandes et coups de l'adversaire """ # To do ! Vous devez programmer cette fonction. (cmd,co) = recvcmd("joue","bravo","aurevoir") if(cmd == "joue"): (i,j)=TablierToPlateauCoord(co) if not(hv.monTour): if(CoupValide(i,j)): if(hv.numJoueur==1): numJoueur=2 else: numJoueur=1 JouerUnCoup(gui, i, j, numJoueur) if(Gagnant(numJoueur)): sendcmd("bravo",numJoueur) hv.monTour=True if(cmd == "bravo"): raise Aurevoir if(cmd == "aurevoir"): raise Aurevoir
def QuitterPartie(gui): if (Aurevoir.etat == 0) or (Aurevoir.etat == 2): sendcmd('aurevoir', '') if Aurevoir.etat == 0: Aurevoir.etat = 1 if Aurevoir.Messages.get() == ("<<<", "aurevoir"): pass else: exit(0) elif Aurevoir.etat == 2: Aurevoir.etat = 1 if recvcmd('aurevoir') == ("aurevoir", ""): pass else: exit(0) hv.gs.close() print("--- La connexion est fermée.") sleep(2) gui.tk.quit() print("--- Le programme est quitté.") else: print("--- En attente de la réponse de l'autre joueur pour quitter. Patientez.")
def CoupAdversaire(gui): """ traite les commandes et coups de l'adversaire """ if hv.numJoueur == 1 : numAdv = 2 else : numAdv = 1 (cmd,coo) = recvcmd ("bravo","oups","aurevoir","joue") if (cmd == "bravo") : raise Bravo if (cmd == "oups") : raise Oups if (cmd == "aurevoir") : raise Aurevoir if (cmd == "joue") : (i,j) = TablierToPlateauCoord (coo) if CoupValide (i,j) and not hv.monTour : if (JouerUnCoup (gui,i,j,numAdv)) : sendcmd("bravo","") hv.monTour = True else : sendcmd("oups","")
def initServeur(arguments): """ initialisation du serveur """ s = socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) #Le serveur est ouvert à toutes adresses ip sur le port 6666 s.bind(('0.0.0.0', 6666)) #On autorise une connexion à la fois s.listen(1) sc, addr = s.accept() #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key] == True] hv.gs = sc #bonjour extension1 extension2 ... (cmd, args) = recvcmd('bonjour') sendcmd('bonjour', ' '.join(listeExtensions)) extensionsSupportees = [] if len(args) > 0: extensionsSupportees = [ param for param in args.split(' ') if arguments[param] ] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur (cmd, args) = recvcmd('joueur') sendcmd('joueur', arguments["NomJoueur"]) NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... (cmd, args) = recvcmd('tablier') sendcmd('tablier', ' '.join(arguments["tablier"])) hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: # To do ! Pour supporter l'extension pileouface, vous devez implémenter ce morceau de code y = str(uuid4()) t = "" if (random == 0): t = "pile" else: t = "face" # A l'image de la description du sujet #On reçoit x du client (cmd, x) = recvcmd("pileouface") #On envoit f(x, y, t) au client f_serveur = f(x, y, t) sendcmd('pileouface', f_serveur) #On reçoit p du client (cmd, p) = recvcmd('pileouface') #On envoie y au client sendcmd('pileouface', y) #On envoie t au client sendcmd('pileouface', t) if (t == p): hv.monTour = False print("--- Ce n'est pas moi qui commence.") else: hv.monTour = True print("--- C'est moi qui commence.") else: hv.monTour = False print("--- Je ne commence pas.") hv.numJoueur = 1 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])
def initClient(arguments): """ initialisation du client """ # programmation réseaux du socket s = socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key] == True] s.connect((arguments["ip"], arguments["port"])) hv.gs = s #bonjour extension1 extension2 ... sendcmd('bonjour', ' '.join(listeExtensions)) (cmd, args) = recvcmd('bonjour') extensionsSupportees = [] if len(args) > 0: extensionsSupportees = [ param for param in args.split(' ') if arguments[param] ] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur sendcmd('joueur', arguments["NomJoueur"]) (cmd, args) = recvcmd('joueur') NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... sendcmd('tablier', ' '.join(arguments["tablier"])) (cmd, args) = recvcmd('tablier') hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: x = str(uuid4()) random = randint(0, 1) p = "" if (random == 0): p = "pile" else: p = "face" #On envoie x au serveur sendcmd('pileouface', x) #On reçoit f(x, y, t) (cmd, arg) = recvcmd('pileouface') f_serveur = arg #On envoie p au serveur sendcmd('pileouface', p) #On recoit y du serveur (cmd, y) = recvcmd('pileouface') #On peut definir sha client f_client = f(x, y, p) #On reçoit t du serveur (cmd, t) = recvcmd('pileouface') if (f_serveur == f_client): if (p == t): hv.monTour = True print("--- C'est moi qui commence") else: sendcmd('aurevoir') QuitterPartie(gui) else: hv.monTour = False print("--- Ce n'est pas moi qui commence") else: hv.monTour = True print("--- C'est moi qui commence.") hv.numJoueur = 2 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])
def initServeur(arguments): """ initialisation du serveur """ # To do ! Pour programmer le serveur, vous devez implémenter cette fonction # programmation réseaux du socket s=socket() s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) s.bind (('0.0.0.0', 6666)) s.listen (1) sc, addr = s.accept() print ("Connexion de : " , addr) #listeExtensions est une liste contenant toutes les extensions passées sur la ligne de commande listeExtensions = [key for key in arguments if arguments[key]==True] hv.gs = sc #bonjour extension1 extension2 ... (cmd,args)=recvcmd('bonjour') sendcmd('bonjour', ' '.join(listeExtensions)) extensionsSupportees = [] if len(args)>0 : extensionsSupportees = [param for param in args.split(' ') if arguments[param]] print("--- Extensions supportées par les deux joueurs :", extensionsSupportees) #joueur NomJoueur (cmd,args)=recvcmd('joueur') sendcmd('joueur', arguments["NomJoueur"]) NomAutreJoueur = args print("--- L'autre joueur s'appelle %s." % NomAutreJoueur) #tablier taille1 taille2 ... (cmd,args) = recvcmd('tablier') sendcmd('tablier', ' '.join(arguments["tablier"])) hv.taille = int(args) print("--- Le serveur a choisi un tablier de taille %s" % hv.taille) if "pileouface" in extensionsSupportees: # To do ! Pour supporter l'extension pileouface, vous devez implémenter ce morceau de code Mot = str (uuid4()) (cmd,args) = recvcmd ('pileouface') rep1 = args ran = randint (0,1) if ran == 0 : ran = 'pile' else : ran = 'face' Server = sha256(' '.join([rep1, Mot, ran]).encode('utf8')).hexdigest() sendcmd ('pileouface' , Server) (cmd,args) = recvcmd ('pileouface') rep2 = args Client = sha256(' '.join([rep1, Mot, rep2]).encode('utf8')).hexdigest() sendcmd ('pileouface', Mot) if Client == Server : hv.monTour = False else : hv.monTour = True else: hv.monTour = False hv.numJoueur = 1 print("--- J'ai la couleur", hv.couleurs[hv.numJoueur])