Added debugging view. Packet loss suspected.
authorEugen Sawin <sawine@me73.com>
Tue, 15 Jun 2010 14:58:05 +0200
changeset 55ab3cc2e7851
parent 4 4cee17e91d29
child 6 9147c845cecb
Added debugging view. Packet loss suspected.
algorithm.py
com.py
server.py
worker.py
     1.1 --- a/algorithm.py	Mon Jun 14 23:16:47 2010 +0200
     1.2 +++ b/algorithm.py	Tue Jun 15 14:58:05 2010 +0200
     1.3 @@ -1,5 +1,6 @@
     1.4  import time
     1.5 -
     1.6 +#cells range -2.2-1.4j 1+1.4j res 1000x1000 sha256:  82fe54e221a7ac3283443fc189bb0baf579bba013a7ed3405606bb2dd8c03127
     1.7 +#empty cells sha256: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a
     1.8  def profile(func):
     1.9  	def wrapper(*arg):
    1.10  		t1 = time.clock()
     2.1 --- a/com.py	Mon Jun 14 23:16:47 2010 +0200
     2.2 +++ b/com.py	Tue Jun 15 14:58:05 2010 +0200
     2.3 @@ -1,5 +1,7 @@
     2.4  import model
     2.5  import pickle
     2.6 +import hashlib
     2.7 +from operator import attrgetter
     2.8  
     2.9  commands = {}
    2.10  
    2.11 @@ -24,7 +26,11 @@
    2.12  def loadModel(socket, client, worker, (name,)):	
    2.13  	model.addModel(pickle.load(open(name + ".model", "r")))
    2.14  	socket.sendto("model %s loaded\n" % name, client)		
    2.15 -		
    2.16 +
    2.17 +def getModel(name):
    2.18 +	if name in model.models:
    2.19 +		return model.models[name]
    2.20 +	
    2.21  def lookupModel(socket, client, name):
    2.22  	if name not in model.models:
    2.23  		socket.sendto("model %s not found\n" % name, client)
    2.24 @@ -71,6 +77,7 @@
    2.25  							complex(new_end_x, end_y))
    2.26  			print model.range
    2.27  			print model.resolution
    2.28 +			model.cells = {}
    2.29  			dump = pickle.dumps(model)
    2.30  			socket.sendto("%010i%s%010i" % (len(dump), dump, 
    2.31  				int(iterations)), w) 
    2.32 @@ -78,7 +85,18 @@
    2.33  			% (modelName, iterations), client)
    2.34  		model.range = (complex(begin_x, begin_y), complex(end_x, end_y))
    2.35  		model.resolution = old_res
    2.36 -		
    2.37 +
    2.38 +def view(socket, client, worker, (name,)):
    2.39 +	model = lookupModel(socket, client, name)
    2.40 +	if model:
    2.41 +		keys = model.cells.keys()
    2.42 +		keys.sort(key=attrgetter("real", "imag"))
    2.43 +		cells = {}
    2.44 +		for k in keys:
    2.45 +			cells[k] = model.cells[k]
    2.46 +		print "size: %i hash: %s" % (len(cells), 
    2.47 +				hashlib.sha256(str(cells)).hexdigest())
    2.48 +	
    2.49  commands = {"help": (help, "help"),
    2.50  	"create model": (createModel, "creates a new model"),
    2.51  	"delete model": (deleteModel, "deletes a model"),	
    2.52 @@ -87,4 +105,5 @@
    2.53  	"set resolution": (setResolution, "sets the model resolution"),
    2.54  	"set range": (setRange, "sets the model range"),
    2.55  	"update": (update, "updates the model data"),
    2.56 +	"view": (view, "shows the model data"),
    2.57  	"add observer": (addObserver, "adds an observer to a model's events"),}
     3.1 --- a/server.py	Mon Jun 14 23:16:47 2010 +0200
     3.2 +++ b/server.py	Tue Jun 15 14:58:05 2010 +0200
     3.3 @@ -18,8 +18,8 @@
     3.4  	def handle(self):
     3.5  		data = self.request[0]
     3.6  		socket = self.request[1]
     3.7 -		print "%s wrote:" % self.client_address[0]
     3.8 -		print data
     3.9 +		#print "%s wrote:" % self.client_address[0]
    3.10 +		#print data
    3.11  		key_found = False
    3.12  		for key, value in com.commands.iteritems():
    3.13  			if key in data:
    3.14 @@ -30,8 +30,12 @@
    3.15  				else:
    3.16  					value[0](socket, self.client_address, self.worker)
    3.17  		if not key_found:
    3.18 -			cell = pickle.loads(data)
    3.19 -			self.cells[cell[0]] = cell[1]
    3.20 +			model_name, _, cell_data = data.partition(" ")
    3.21 +			cell = pickle.loads(cell_data)
    3.22 +			#self.cells[cell[0]] = cell[1]			
    3.23 +			model = com.getModel(model_name)
    3.24 +			#print cell
    3.25 +			model.cells[cell[0]] = cell[1]
    3.26  			#print hashlib.sha256(str(self.cells)).hexdigest()
    3.27  			
    3.28  		
     4.1 --- a/worker.py	Mon Jun 14 23:16:47 2010 +0200
     4.2 +++ b/worker.py	Tue Jun 15 14:58:05 2010 +0200
     4.3 @@ -3,6 +3,7 @@
     4.4  import com
     4.5  import model
     4.6  import optparse
     4.7 +import time
     4.8  import pickle
     4.9  import SocketServer
    4.10  
    4.11 @@ -24,7 +25,9 @@
    4.12  		max_iter = int(data[10+model_size:20+model_size])
    4.13  		model.update(max_iter)
    4.14  		for cell in model.cells.iteritems():
    4.15 -			socket.sendto(pickle.dumps(cell), self.client_address)
    4.16 +			time.sleep(0.01)
    4.17 +			socket.sendto(model.name + " " + pickle.dumps(cell), 
    4.18 +				self.client_address)
    4.19  		
    4.20  class Worker(SocketServer.UDPServer):
    4.21  	def __init__(self, host, port, handler, options):