#-*- coding:Utf-8 -*- HOST = '192.168.1.33' PORT = 46000 import socket, sys, threading import sqlite3 class agendaLigne(threading.Thread): def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn def run(self): nom=self.getName() print(nom) while 1: msgClient = self.connexion.recv(1024).decode("Utf8") print(msgClient) if msgClient[:4]=="INSC": conn=sqlite3.connect("AgendaBDD.sq3") cur=conn.cursor() ok=1 #Empeche les entrées d'obtenir le caractère # qui permet de les séparer if msgClient.count("#")>4 or "." in msgClient: self.msgErro="Certains caracatères sont interdis (#, .)" ok=0 else: #Sépare la chaine aux endroit ou se trouve # et en fait une liste d'élément msgClient=msgClient[5:].split("#") print(msgClient) cur.execute("SELECT compte FROM logins") comptes=list(cur) #Le Nom de compte doit faire au moins 4 car if len(msgClient[0])<4: self.msgErro="Nom de compte trop court, minimum 4 caractères!" ok=0 #Le nom de compte ne doit pas déjà existé for tu in comptes: print(tu) if msgClient[0].upper() in tu: self.msgErro="Nom de compte déjà utilisé" ok=0 #Mot de passe de mini 6 car if len(msgClient[1])<6: self.msgErro="Mot de passe trop court, minimum 6 caractères" ok=0 #Les deux mots de passes doivent être identiques if msgClient[1]!=msgClient[2]: self.msgErro="Les mots de passes ne correspondent pas" ok=0 if ok==1: msgClient.remove(msgClient[1]) print(msgClient) cur.execute("INSERT INTO logins (compte, mdp, theme) VALUES(?,?,?)", msgClient) conn.commit() conn_client[nom].send("ok".encode("Utf8")) else: conn_client[nom].send(self.msgErro.encode("Utf8")) cur.close() conn.close() elif msgClient[:4]=="CONN": conn=sqlite3.connect("AgendaBDD.sq3") cur=conn.cursor() ok=0 msgClient=msgClient[5:].split('#') print(msgClient) cur.execute("SELECT compte, mdp FROM logins") current=list(cur) for tu in current: if msgClient[0]==tu[0] and msgClient[1]==tu[1]: ok=1 break if ok==1: conn_client[nom].send("ok".encode("Utf8")) else: conn_client[nom].send("Nom de compte ou mot de passe incorrect !".encode("Utf8")) cur.close() conn.close() elif msgClient[:4]=="AJOU": conn=sqlite3.connect("AgendaBDD.sq3") cur=conn.cursor() msgClient=msgClient[4:].split(".") cur.execute("INSERT INTO event (login, jour, mois, annee, titre, type, heure) VALUES (?,?,?,?,?,?,?)", msgClient) conn.commit() cur.close() conn.close() elif msgClient[:4] == "AGDJ": msgClient=msgClient[5:].split("#") conn=sqlite3.connect("AgendaBDD.sq3") cur=conn.cursor() print(msgClient) cur.execute("SELECT * FROM event WHERE login='"+msgClient[0]+"' AND jour='"+msgClient[1]+"' AND mois='"+msgClient[2]+"' AND annee='"+msgClient[3]+"'") event=list(cur) print(event) agdj="" for tu in event: agdj+=".".join(tu)+"#" print(nom) conn_client[nom].send(agdj.encode("Utf8")) print(1) cur.close() conn.close() else: break #Fermeture de la connexion : self.connexion.close() # couper la connexion côté serveur del conn_client[nom] # supprimer son entrée dans le dictionnaire # Initialisation du serveur - Mise en place du socket : mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: mySocket.bind((HOST, PORT)) except socket.error: print("La liaison du socket à l'adresse choisie a échoué.") sys.exit() print("Serveur prêt, en attente de requêtes ...") mySocket.listen(7) # Attente et prise en charge des connexions demandées par les clients : conn_client = {} # dictionnaire des connexions clients while 1: connexion, adresse = mySocket.accept() # Créer un nouvel objet thread pour gérer la connexion : th = agendaLigne(connexion) th.start() # Mémoriser la connexion dans le dictionnaire : it = th.getName() # identifiant du thread conn_client[it] = connexion print("Client %s connecté, adresse IP %s, port %s." %\ (it, adresse[0], adresse[1]))