Added debugging view. Packet loss suspected.
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):