diff --git a/src/client.py b/src/client.py --- a/src/client.py +++ b/src/client.py @@ -10,79 +10,85 @@ from networkers import NetworkReader,Net filename=sys.argv[1] -def connect(): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((conf.hosts[0], conf.port)) - fr=s.makefile(mode='rb') - fw=s.makefile(mode='wb') +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") - networkReader=NetworkReader(fr) - networkReader.start() - networkWriter=NetworkWriter(fw) - networkWriter.start() + networkReader=NetworkReader(fr) + networkReader.start() + networkWriter=NetworkWriter(fw) + networkWriter.start() - incoming=networkReader.output # synchronized message queue - outcoming=networkWriter.input + self.incoming=networkReader.output # synchronized message queue + self.outcoming=networkWriter.input - return (s,incoming,outcoming) + def __enter__(self): + return self.incoming,self.outcoming + + def __exit__(self, exc_type, exc_val, exc_tb): + self.socket.close() -def negotiate(incoming,outcoming): +def negotiate(): localTree=HashTree.fromFile(open(filename,mode="rb")) blocksToTransfer=[] nodeStack=collections.deque([0]) # root # initialize session - jsonData={"command":"init", "blockSize":localTree.BLOCK_SIZE, "blockCount":localTree.leafCount, "version":conf.version} - outcoming.put((jsonData,b"")) + with Connection() as (incoming,outcoming): + jsonData={"command":"init", "blockSize":localTree.BLOCK_SIZE, "blockCount":localTree.leafCount, "version":conf.version} + outcoming.put((jsonData,b"")) # determine which blocks to send while len(nodeStack)>0: - i=nodeStack.pop() - jsonData={"command":"req", "index":i} - outcoming.put((jsonData,b"")) + with Connection() as (incoming,outcoming): + i=nodeStack.pop() + jsonData={"command":"req", "index":i} + outcoming.put((jsonData,b"")) - jsonData,binData=incoming.get(timeout=2) - assert jsonData["index"]==i - assert jsonData["dataType"]=="hash" + jsonData,binData=incoming.get(timeout=2) + assert jsonData["index"]==i + assert jsonData["dataType"]=="hash" - if localTree.store[i]!=binData: - if 2*i+3