1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/com.py Thu May 27 17:14:56 2010 +0200
1.3 @@ -0,0 +1,45 @@
1.4 +import grid
1.5 +
1.6 +def createGrid(socket, client, (name,)):
1.7 + grid.createGrid(name)
1.8 + #print "grid %s created" % name
1.9 + socket.sendto("grid %s created\n" % name, client)
1.10 +
1.11 +def listGrids(socket, client):
1.12 + #print grid.grids
1.13 + socket.sendto(" ".join(grid.grids.iterkeys()) + "\n", client)
1.14 +
1.15 +def lookupGrid(socket, client, name):
1.16 + if name not in grid.grids:
1.17 + socket.sendto("grid %s not found\n" % name, client)
1.18 + return None
1.19 + else:
1.20 + return grid.grids[name]
1.21 +
1.22 +def listCells(socket, client, (gridName,)):
1.23 + grid = lookupGrid(socket, client, gridName)
1.24 + if grid:
1.25 + socket.sendto(" ".join([str(cell) for cell in grid.cells.itervalues()])
1.26 + + "\n", client)
1.27 +
1.28 +def setCell(socket, client, (gridName, cellId, value)):
1.29 + grid = lookupGrid(socket, client, gridName)
1.30 + if grid:
1.31 + grid.set(int(cellId), int(value))
1.32 + #socket.sendto("cell %s on grid %s set to %s\n" %(cellId, gridName, value),
1.33 + # client)
1.34 +
1.35 +def iterate(socket, client, (gridName, iterNo)):
1.36 + pass
1.37 +
1.38 +def addObserver(socket, client, (gridName,)):
1.39 + grid = lookupGrid(socket, client, gridName)
1.40 + if grid:
1.41 + grid.addObserver(socket, client)
1.42 +
1.43 +commands = {"create grid": createGrid,
1.44 + "list grids": listGrids,
1.45 + "set cell": setCell,
1.46 + "list cells": listCells,
1.47 + "iterate": iterate,
1.48 + "add observer": addObserver}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/grid.py Thu May 27 17:14:56 2010 +0200
2.3 @@ -0,0 +1,37 @@
2.4 +grids = {}
2.5 +
2.6 +def createGrid(name):
2.7 + grids[name] = Grid(name)
2.8 +
2.9 +class Cell(object):
2.10 +
2.11 + def __init__(self, id, value):
2.12 + self.id = id
2.13 + self.value = value
2.14 +
2.15 + def __str__(self):
2.16 + return "(id:%s value:%s)" % (self.id, self.value)
2.17 +
2.18 +class Grid(object):
2.19 +
2.20 + def __init__(self, name):
2.21 + self.name = name
2.22 + self.cells = {}
2.23 + self.observers = []
2.24 +
2.25 + def set(self, cellId, value):
2.26 + if value and cellId not in self.cells:
2.27 + self.cells[cellId] = Cell(cellId, value)
2.28 + self.dispatch(Cell(cellId, 0), self.cells[cellId])
2.29 + elif not value and cellId in self.cells:
2.30 + self.dispatch(self.cells[cellId], Cell(cellId, 0))
2.31 + del self.cells[cellId]
2.32 +
2.33 + def dispatch(self, old, new):
2.34 + for o in self.observers:
2.35 + o[0].sendto("old: %s\nnew: %s\n" % (old, new), o[1])
2.36 +
2.37 + def addObserver(self, socket, observer):
2.38 + self.observers.append((socket, observer))
2.39 +
2.40 +
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3.2 +++ b/server.py Thu May 27 17:14:56 2010 +0200
3.3 @@ -0,0 +1,46 @@
3.4 +#!/usr/bin/python
3.5 +
3.6 +import com
3.7 +import grid
3.8 +import optparse
3.9 +import SocketServer
3.10 +
3.11 +option_list = [
3.12 + optparse.make_option("-q", "--quiet", action="store_true", dest="quiet",
3.13 + help="quiet mode", default=False)]
3.14 +
3.15 +class Handler(SocketServer.BaseRequestHandler):
3.16 + """
3.17 + """
3.18 + def handle(self):
3.19 + data = self.request[0].strip()
3.20 + socket = self.request[1]
3.21 + print "%s wrote:" % self.client_address[0]
3.22 + print data
3.23 + for key, value in com.commands.iteritems():
3.24 + if key in data:
3.25 + args = data.partition(key)[2].split()
3.26 + if args:
3.27 + value(socket, self.client_address, args)
3.28 + else:
3.29 + value(socket, self.client_address)
3.30 +
3.31 +class Server(SocketServer.UDPServer):
3.32 + def __init__(self, host, port, handler, options):
3.33 + SocketServer.UDPServer.__init__(self, (host, port), handler)
3.34 + self.host = host
3.35 + self.port = port
3.36 + self.handler = handler
3.37 + self.options = options
3.38 + def run(self):
3.39 + self.serve_forever()
3.40 +
3.41 +if __name__ == "__main__":
3.42 + parser = optparse.OptionParser(usage="usage: %prog [options] port",
3.43 + option_list=option_list)
3.44 + options, args = parser.parse_args()
3.45 +
3.46 + if len(args) > 0:
3.47 + port = int(args[0])
3.48 + server = Server("localhost", port, Handler, options)
3.49 + server.run()