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")