X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=client.py;h=82a6071c7a501cf3b60736b805dcc58dcf0bb3e8;hb=d305b74c85f3460df754b724bd71d6eebb15c587;hp=297e76d741a4179cafc3df4b18a4efb0ad454e24;hpb=fe716a175a98d4b569d8e6deb9a8bf0e98ef873f;p=NK2015_Client_Python_Alpha.git diff --git a/client.py b/client.py index 297e76d..82a6071 100755 --- a/client.py +++ b/client.py @@ -19,22 +19,26 @@ from pprint import pprint sys.path.append(client_config.rsa_path) import monRSA -class DeadServer(Exception): - pass - -def full_read(sock): - """Lit sur la socket jusqu'à ce que l'output soit déJSON-izable""" - output="" - i = 0 - while True: - output+=sock.read() - i += 1 - try: - return json.loads(output) - except: - pass - if i==10 and output=="": - raise DeadServer +def full_read(socket): + """Lit un message complet sur la socket.""" + # On récupère d'abord la taille du message + length_str = '' + char = socket.recv(1) + while char != '\n': + length_str += char + char = socket.recv(1) + total = int(length_str) + # On utilise une memoryview pour recevoir les données chunk par chunk efficacement + view = memoryview(bytearray(total)) + next_offset = 0 + while total - next_offset > 0: + recv_size = socket.recv_into(view[next_offset:], total - next_offset) + next_offset += recv_size + try: + msg = json.loads(view.tobytes()) + except (TypeError, ValueError) as e: + raise NKNotJson("L'objet reçu n'est pas un JSON") + return msg def connect(sock,where,port=None): if port==None: @@ -68,7 +72,7 @@ def hello(socket,version): return lit(a) def login(socket,user,mdp="",typ="bdd"): - if user in ["20-100","moibdd","#1"]: + if user in ["#1", "test"]: a.write('["login", ["#1","plop","bdd",[[],[],false]]]') elif user in ["vincent","moi"]: a.write('["login", ["vincent","plop","special",[]]]') @@ -76,6 +80,9 @@ def login(socket,user,mdp="",typ="bdd"): a.write('["login", ["toto","plop","bdd",[[],[],false]]]') else: a.write('["login", ["%s","%s","%s",[[],[],false]]]'%(user,mdp,typ)) + if mdp == "": + import getpass + mdp = getpass.getpass() return lit(a) def search(socket,term): @@ -92,8 +99,11 @@ def lit(socket): return obj["msg"] except ssl.SSLError: print "Rien à lire" - except DeadServer: - print "Serveur down ?" + +def do(stuff): + """Dirty, 'cause I'm lazy.""" + global a + a.write(json.dumps(stuff)) if __name__=="__main__": where=raw_input("quel serveur ?") @@ -103,6 +113,13 @@ if __name__=="__main__": a.settimeout(2) #checkidentity(a) print hello(a,"Python Client alpha") + try: + import secrets + user = secrets.user + password = secrets.password + except ImportError: + print "Y U no secrets.py !?" + exit(1) print login(a,"20-100","plop") print "Socket créée dans la variable \"a\""