diff --git a/src/client.py b/src/client.py --- a/src/client.py +++ b/src/client.py @@ -104,3 +104,33 @@ class Client: log.info("closing session...") dataFile.close() + + def pullData(self,blocksToTransfer): + log.info(blocksToTransfer) + dataFile=open(self._filename, mode="rb+") + i1=-1 + + print(datetime.now(), "receiving data:") + with Connection(self._ssl) as (incoming,outcoming): + progress=Progress(len(blocksToTransfer)) + for (k,i2) in enumerate(blocksToTransfer): + outcoming.writeMsg({"command":"req", "index":i2, "dataType":"data"}) + jsonData,binData=incoming.readMsg() + assert jsonData["command"]=="send" and jsonData["index"]==i2 and jsonData["dataType"]=="data", jsonData + + if i1+1!=i2: + dataFile.seek(i2*HashTree.BLOCK_SIZE) + dataFile.write(binData) + + log.info("block #{0}: {1}...{2}".format(i2,binData[:5],binData[-5:])) + + stats.logTransferredBlock() + i1=i2 + progress.p(k) + progress.done() + + with Connection(self._ssl) as (incoming,outcoming): + outcoming.writeMsg({"command":"end"}) + + log.info("closing session...") + dataFile.close()