view atcgame/server.py @ 57:35999e551d7a server tip

Call state's update method 2 times per second
author Josef "Jeff" Sipek <jeffpc@josefsipek.net>
date Sun, 03 Jun 2007 01:25:28 -0400
parents a793c2b15c71
children
line wrap: on
line source

#/*
# * ATC - Air Traffic Controller simulation game
# *
# * Copyright (C) 2004-2007 Josef "Jeff" Sipek <jeffpc@josefsipek.net>
# *
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License version 2 as
# * published by the Free Software Foundation.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# * GNU General Public License for more details.
# */

try:
	import os
	import sys
	import threading
	import time
	from SimpleXMLRPCServer import SimpleXMLRPCServer
	
	import config
	import utils
	import maps
except ImportError, err:
	print "Couldn't load module %s" % (err)
	sys.exit()


try:
	from __version__ import version
except ImportError, err:
	version = "?"

def main(datadir_arg, mapname):
	""" Main fn to run the main thread """
	def server_helper():
		while not ShutDown:
			server.handle_request()
	##

	ShutDown = False
	
	config.datadir = datadir_arg

	state = ATCServer(mapname)

	server = SimpleXMLRPCServer(("localhost", 9000))
	server.register_introspection_functions()
	server.allow_reuse_address = True

	server.register_instance(state)

	server_thread = threading.Timer(0, server_helper)
	server_thread.start()

	try:
		while True:
			time.sleep(0.5)
			state.update()
			pass
	except KeyboardInterrupt:
		print "Shutting down..."
		ShutDown = True

class ATCServer:
	def __init__(self, mapname):
		# Find the map
		self.map = maps.getmap(mapname)
		self.map.bootstrap_navs()

		# List of all planes in the world
		self.planes = []

	def update(self):
		for p in self.planes:
			p.update()

	def zero(self):
		return 0