diff --git a/src/client.py b/src/client.py --- a/src/client.py +++ b/src/client.py @@ -105,8 +105,7 @@ class Client(NetNode): def sendData(self,blocksToTransfer): log.info(blocksToTransfer) - dataFile=open(self._filename, mode="rb") - i1=-1 + dataFile=DataFile.open(self._filename) print(datetime.now(), "sending data:") progress=Progress(len(blocksToTransfer)) @@ -116,16 +115,13 @@ class Client(NetNode): blocks=[] for j in range(conf.batchSize.data): if k+j>=len(blocksToTransfer): break - i2=blocksToTransfer[k+j] - if i1+1!=i2: - dataFile.seek(i2*HashTree.BLOCK_SIZE) - block=dataFile.read(HashTree.BLOCK_SIZE) + i=blocksToTransfer[k+j] + block=dataFile.readFrom(i) - indices.append(i2) + indices.append(i) blocks.append(block) - log.info("block #{0}: {1}...{2}".format(i2,block[:5],block[-5:])) + log.info("block #{0}: {1}...{2}".format(i,block[:5],block[-5:])) - i1=i2 progress.p(k+j) if indices: self._sendData(indices,blocks) progress.done() diff --git a/src/server.py b/src/server.py --- a/src/server.py +++ b/src/server.py @@ -7,6 +7,7 @@ from hashtree import hashBlock from netnode import BaseConnection,NetNode import config as conf import status +from datafile import DataFile class Connection(BaseConnection): @@ -54,8 +55,7 @@ class Server(NetNode): self.BLOCK_SIZE=self._tree.BLOCK_SIZE - self._lastIndex=-1 - self._dataFileHandle=None + self._dataFileObj=None @staticmethod def run(connection,*args): @@ -65,9 +65,9 @@ class Server(NetNode): @property def _dataFile(self): - if not self._dataFileHandle: - self._dataFileHandle=open(self._filename, mode="rb+") - return self._dataFileHandle + if not self._dataFileObj: + self._dataFileObj=DataFile.open(self._filename, mode="rb+") + return self._dataFileObj def serve(self): try: @@ -125,9 +125,7 @@ class Server(NetNode): jsonResponse={"command":"send", "index":index, "dataType":"data"} blocks=[] for i in index: - if self._lastIndex+1!=i: - self._dataFile.seek(i*self.BLOCK_SIZE) - blocks.append(self._dataFile.read(self.BLOCK_SIZE)) + blocks.append(self._dataFile.readFrom(i)) return (jsonResponse,b"".join(blocks)) @@ -137,11 +135,8 @@ class Server(NetNode): indices=jsonData["index"] for (i,k) in enumerate(indices): - if self._lastIndex+1!=k: - self._dataFile.seek(k*self.BLOCK_SIZE) block=binData[i*self.BLOCK_SIZE:(i+1)*self.BLOCK_SIZE] - self._dataFile.write(block) - self._lastIndex=k + self._dataFile.writeAt(k,block) if self._treeFile: self._newLeaves[k+self._tree.leafStart]=hashBlock(block) @@ -150,7 +145,7 @@ class Server(NetNode): def _finalize(self): log.info("closing session...") self._dataFile.close() - self._dataFileHandle=None + self._dataFileObj=None if self._treeFile: self._updateTree() log.info("done")