diff --git a/src/netnode.py b/src/netnode.py new file mode 100644 --- /dev/null +++ b/src/netnode.py @@ -0,0 +1,48 @@ +import socket +import logging as log + +from networkers import NetworkReader,NetworkWriter +from hashtree import HashTree + + +class BaseConnection: # abstract + def __init__(self): + self._socket=None + self.incoming=None + self.outcoming=None + + def createNetworkers(self): + 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.shutdown(socket.SHUT_RDWR) + self._socket.close() + + +class NetNode: + def __init__(self,filename,treeFile=""): + self._incoming=None + self._outcoming=None + + self._filename=filename + self._treeFile=treeFile + + if treeFile: + self._tree=HashTree.load(treeFile) + else: + self._tree=HashTree.fromFile(filename) + + self._newLeaves=dict() + + def _updateTree(self): + log.info("updating hash tree...") + for (k,v) in self._newLeaves.items(): + self._tree.updateLeaf(k, v) + self._tree.save(self._treeFile)