diff --git a/src/server.py b/src/server.py --- a/src/server.py +++ b/src/server.py @@ -1,20 +1,11 @@ import socket from hashtree import HashTree from networkers import NetworkReader,NetworkWriter -import collections -import sys import logging as log import config as conf -# debug copy default file -import shutil -origFilename=sys.argv[1] -filename=origFilename+"_" -shutil.copyfile(origFilename,filename) - - class Connection: def __init__(self,server_socket): self.socket, address = server_socket.accept() @@ -32,53 +23,63 @@ class Connection: self.socket.close() -localTree=HashTree.fromFile(filename) +class Server: + def __init__(self,filename): + self.filename=filename + self.tree=HashTree.fromFile(filename) + self.BLOCK_SIZE=self.tree.BLOCK_SIZE -ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -ss.bind(("",conf.port)) -ss.listen(1) + self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.ss.bind(("",conf.port)) + self.ss.listen(1) -blocksToTransfer=[] -nodeStack=collections.deque([0]) + self._lastWrite=-1 -i1=-1 + def serve(self): + while self._serveOne(): + pass + def _serveOne(self): + with Connection(self.ss) as (incoming,outcoming): + jsonData,binData=incoming.readMsg() -while True: - with Connection(ss) as (incoming,outcoming): - jsonData,binData=incoming.readMsg() - dataFile=open(filename,mode="rb+") + if jsonData["command"]=="init": + assert jsonData["blockSize"]==self.BLOCK_SIZE + assert jsonData["blockCount"]==self.tree.leafCount - if jsonData["command"]=="init": - assert jsonData["blockSize"]==localTree.BLOCK_SIZE - assert jsonData["blockCount"]==localTree.leafCount + elif jsonData["command"]=="req": + outcoming.writeMsg(*self._requestHash(jsonData)) + + elif jsonData["command"]=="send" and jsonData["dataType"]=="data": + self._receiveData(jsonData,binData) - elif jsonData["command"]=="req": - log.info("received request for node #{0}".format(jsonData["index"])) - assert jsonData["index"]