Changeset - 8b0dc65400f3
[Not reviewed]
default
0 2 0
Laman - 8 years ago 2017-05-08 01:01:52

server accepting saved tree, fixed missing seeks
2 files changed with 24 insertions and 13 deletions:
0 comments (0 inline, 0 general)
src/morevna.py
Show inline comments
 
@@ -7,27 +7,29 @@ from client import Client
 
from server import Server
 

	
 

	
 
def _checkDatafile(datafile):
 
	if not os.path.isfile(datafile):
 
		print("invalid file specified:",args.datafile,file=sys.stderr)
 
def _checkFile(f):
 
	if not os.path.isfile(f):
 
		print("invalid file specified:",f,file=sys.stderr)
 
		sys.exit(1)
 

	
 

	
 
def buildTree(args):
 
	_checkDatafile(args.datafile)
 
	_checkFile(args.datafile)
 

	
 
	tree=HashTree.fromFile(args.datafile)
 
	tree.save(args.treefile)
 

	
 
def update(args):
 
	_checkDatafile(args.datafile)
 
	_checkFile(args.datafile)
 

	
 
	c=Client(args.datafile)
 
	blocksToTransfer=c.negotiate()
 
	c.sendData(blocksToTransfer)
 

	
 
def serve(args):
 
	_checkDatafile(args.datafile)
 
	_checkFile(args.datafile)
 
	if args.tree:
 
		_checkFile(args.tree)
 

	
 
	# debug copy default file
 
	import shutil
 
@@ -35,7 +37,7 @@ def serve(args):
 
	filename=origFilename+"_"
 
	shutil.copyfile(origFilename,filename)
 

	
 
	s=Server(filename)
 
	s=Server(filename,args.tree)
 
	s.serve()
 

	
 

	
src/server.py
Show inline comments
 
@@ -24,9 +24,14 @@ class Connection:
 

	
 

	
 
class Server:
 
	def __init__(self,filename):
 
	def __init__(self,filename,treeFile=""):
 
		self.filename=filename
 
		self.tree=HashTree.fromFile(filename)
 

	
 
		if treeFile:
 
			self.tree=HashTree.load(treeFile)
 
		else:
 
			self.tree=HashTree.fromFile(filename)
 

	
 
		self.BLOCK_SIZE=self.tree.BLOCK_SIZE
 

	
 
		self.ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
@@ -34,6 +39,7 @@ class Server:
 
		self.ss.listen(1)
 

	
 
		self._lastWrite=-1
 
		self.dataFile=None
 

	
 
	def serve(self):
 
		while self._serveOne():
 
@@ -55,6 +61,8 @@ class Server:
 

	
 
			elif jsonData["command"]=="end":
 
				log.info("closing session...")
 
				if self.dataFile:
 
					self.dataFile.close()
 
				return False
 

	
 
			else:
 
@@ -75,11 +83,12 @@ class Server:
 
	def _receiveData(self,jsonData,binData):
 
		log.info("received data block #{0}: {1}...{2}".format(jsonData["index"],binData[:5],binData[-5:]))
 

	
 
		if not self.dataFile:
 
			self.dataFile=open(self.filename,mode="rb+")
 
		i=jsonData["index"]
 
		with open(self.filename,mode="rb+") as dataFile:
 
			if self._lastWrite+1!=i:
 
				dataFile.seek(i*self.BLOCK_SIZE)
 
			dataFile.write(binData)
 
		if self._lastWrite+1!=i:
 
			self.dataFile.seek(i*self.BLOCK_SIZE)
 
		self.dataFile.write(binData)
 
		self._lastWrite=i
 

	
 
		# never update the hash tree
0 comments (0 inline, 0 general)