server.py
author Eugen Sawin <sawine@me73.com>
Sun, 13 Jun 2010 04:34:03 +0200
changeset 2 b887ce19c300
parent 0 a99535269d60
child 3 234fa7eea0df
permissions -rw-r--r--
Added worker.
     1 #!/usr/bin/python
     2 
     3 import com
     4 import worker
     5 import optparse
     6 import subprocess
     7 import SocketServer
     8 
     9 option_list = [
    10 	optparse.make_option("-q", "--quiet", action="store_true", dest="quiet", 
    11 		help="quiet mode", default=False)]
    12 	
    13 class Handler(SocketServer.BaseRequestHandler):
    14 	"""
    15 	"""	
    16 	def handle(self):
    17 		data = self.request[0].strip()
    18 		socket = self.request[1]
    19 		print "%s wrote:" % self.client_address[0]
    20 		print data
    21 		for key, value in com.commands.iteritems():
    22 			if key in data:
    23 				args = data.partition(key)[2].split()
    24 				if args:
    25 					value[0](socket, self.client_address, self.worker, args)
    26 				else:
    27 					value[0](socket, self.client_address, self.worker)
    28 		
    29 class Server(SocketServer.UDPServer):
    30 	def __init__(self, host, port, handler, options, worker):
    31 		SocketServer.UDPServer.__init__(self, (host, port), handler)
    32 		self.host = host
    33 		self.port = port
    34 		self.handler = handler
    35 		self.options = options
    36 		self.handler.worker = worker
    37 	def run(self):
    38 		self.serve_forever()
    39 
    40 def spawnWorker(server, n):
    41 	port = server[1] + 1
    42 	worker_list = [] 
    43 	for i in xrange(n):
    44 		#worker.spawn(server[0], port + i)
    45 		subprocess.Popen(["python worker.py", str(port + i)], shell=True)
    46 		worker_list.append((server[0], port + i)) 
    47 	return worker_list		
    48 
    49 if __name__ == "__main__":
    50 	parser = optparse.OptionParser(usage="usage: %prog [options] port worker",
    51 		option_list=option_list)
    52 	options, args = parser.parse_args()
    53 	
    54 	if len(args) > 0:
    55 		host = "localhost"
    56 		port = int(args[0])
    57 		worker_count = int(args[1])
    58 		worker = spawnWorker((host, port), worker_count)
    59 		server = Server(host, port, Handler, options, worker)
    60 		server.run()