init
authorEugen Sawin <sawine@me73.com>
Thu, 27 May 2010 17:14:56 +0200
changeset 0fb00185487d4
child 1 2e65c867022c
init
com.py
grid.py
server.py
     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()