diff --git a/src/server.py b/src/server.py --- a/src/server.py +++ b/src/server.py @@ -3,29 +3,20 @@ import ssl import multiprocessing import logging as log -from hashtree import HashTree,hashBlock -from networkers import NetworkReader,NetworkWriter +from hashtree import hashBlock +from netnode import BaseConnection,NetNode import config as conf -class Connection: +class Connection(BaseConnection): def __init__(self,serverSocket,sslContext): + super().__init__() + sock, address = serverSocket.accept() self._socket=sslContext.wrap_socket(sock,server_side=True) log.info('Connected by {0}'.format(address)) - 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() + self.createNetworkers() class Miniserver: @@ -49,18 +40,11 @@ class Miniserver: p.join() -class Server: +class Server(NetNode): def __init__(self,connection,filename,treeFile=""): + super().__init__(filename,treeFile) (self._incoming,self._outcoming)=connection - self._filename=filename - self._treeFile=treeFile - if treeFile: - self._tree=HashTree.load(treeFile) - else: - self._tree=HashTree.fromFile(filename) - - self._newLeaves=dict() self.BLOCK_SIZE=self._tree.BLOCK_SIZE self._lastIndex=-1 @@ -148,8 +132,5 @@ class Server: self._dataFile.close() self._dataFileHandle=None if self._treeFile: - log.info("updating hash tree...") - for (k,v) in self._newLeaves.items(): - self._tree.updateLeaf(k, v) - self._tree.save(self._treeFile) + self._updateTree() log.info("done")