diff --git a/src/client.py b/src/client.py --- a/src/client.py +++ b/src/client.py @@ -1,88 +1,88 @@ -from hashtree import HashTree -import collections -import socket -import sys -import logging as log - -import config as conf -from networkers import NetworkReader,NetworkWriter - - -filename=sys.argv[1] - - -class Connection: - def __init__(self): - self.socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) - self.socket.connect((conf.hosts[0], conf.port)) - fr=self.socket.makefile(mode="rb") - fw=self.socket.makefile(mode="wb") - - self.incoming=NetworkReader(fr) - self.outcoming=NetworkWriter(fw) - - def __enter__(self): - return self.incoming,self.outcoming - - def __exit__(self, exc_type, exc_val, exc_tb): - self.socket.close() - - -def negotiate(): - localTree=HashTree.fromFile(open(filename,mode="rb")) - blocksToTransfer=[] - nodeStack=collections.deque([0]) # root - - # initialize session - with Connection() as (incoming,outcoming): - jsonData={"command":"init", "blockSize":localTree.BLOCK_SIZE, "blockCount":localTree.leafCount, "version":conf.version} - outcoming.writeMsg(jsonData) - - # determine which blocks to send - while len(nodeStack)>0: - with Connection() as (incoming,outcoming): - i=nodeStack.pop() - outcoming.writeMsg({"command":"req", "index":i}) - - jsonData,binData=incoming.readMsg() - assert jsonData["index"]==i - assert jsonData["dataType"]=="hash" - - if localTree.store[i]!=binData: - if 2*i+30: + with Connection() as (incoming,outcoming): + i=nodeStack.pop() + outcoming.writeMsg({"command":"req", "index":i}) + + jsonData,binData=incoming.readMsg() + assert jsonData["index"]==i + assert jsonData["dataType"]=="hash" + + if localTree.store[i]!=binData: + if 2*i+3