Files @ d0161c81635b
Branch filter:

Location: Morevna/src/morevna.py

Laman
server updates its hash tree
import sys
import os.path
from argparse import ArgumentParser

import config as conf
import stats
from hashtree import HashTree
from client import Client
from server import Server


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


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

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

def update(args):
	_checkFile(args.datafile)
	if args.host: conf.hosts.insert(0,args.host)
	if args.port: conf.port=args.port

	c=Client(args.datafile)
	blocksToTransfer=c.negotiate()
	c.sendData(blocksToTransfer)
	print()
	print(stats.report())

def serve(args):
	_checkFile(args.datafile)
	if args.tree:
		_checkFile(args.tree)
	if args.host: conf.hosts.insert(0,args.host)
	if args.port: conf.port=args.port

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


parser=ArgumentParser()
subparsers=parser.add_subparsers()

pBuild=subparsers.add_parser("build")
pBuild.add_argument("treefile", help="stored hash tree location")
pBuild.add_argument("datafile")
pBuild.set_defaults(func=buildTree)

pUpdate=subparsers.add_parser("update")
pUpdate.add_argument("-p","--port",type=int)
pUpdate.add_argument("--host",default="127.0.0.1")
pUpdate.add_argument("datafile")
pUpdate.set_defaults(func=update)

pServe=subparsers.add_parser("serve")
pServe.add_argument("-p","--port",type=int)
pServe.add_argument("--host",default="")
pServe.add_argument("-t","--tree",help="stored hash tree location")
pServe.add_argument("datafile")
pServe.set_defaults(func=serve)

args=parser.parse_args()
args.func(args)