def run(self): self.running = True try: while self.running: pass except Exception as e: log.server("server.start:: exception: {}".format(e)) self.stop()
def __init__(self): init(sys.argv[1]) super().__init__(("", description.get_port()), GameRequestHandler) self.running = False self.wm = None self.messages = SharedList() self.players = SharedList() log.server("server.GameServer.__init__:: description: {}".format( description.to_string()))
def handle(self): try: message = pickle.loads(self.request[0]) socket = self.request[1] #log.server("server.GameRequestHandler:: recv: {}'" # .format(message)) self.server.messages.push(message) response = pickle.dumps(self.server.reply_message(message)) socket.sendto(response, self.client_address) #log.server("server.GameRequestHandler:: send: {}" # .format(response)) except Exception as e: log.server( "server.GameRequestHandler.handler:: exception: {}".format( traceback.format_exc()))
def reply_message(self, message): verb = message.get_verb() try: handler = eval("self.reply_{}".format(verb)) except Exception as e: log.server( "server.GameServer.reply_message:: exception: {}".format(e)) return Message("error", "Unhandled message class") try: return handler(message) except Exception as e: log.server( "server.GameServer.reply_message:: exception: {}".format( traceback.format_exc())) return Message("error", "Message handling error")
def reply_players(self, message): players = message.get_data() self.players.acquire() registered = self.players.length() if len(players) <= description.max_players - registered: idss = range(registered, registered + len(players)) for idc, ids in enumerate(idss): players[idc].set_ids(ids) players[idc].set_pos(self.wm.get_starts()[ids]) log.server("server.GameServer.reply_players:: players: {}".format( players)) [self.players.push(p) for p in players] else: players = [] self.players.release() return Message("players", players)
def load_map(self): self.wm = WorldMap(description.get_mapname()) log.server("server.GameServer.load_map:: map: {}".format( self.wm.get_name()))
def reply_world_map(self, message): log.server("server.GameServer.reply_world_map:: map: {}".format( self.wm)) return Message("world_map", self.wm)
import server, log def main(): game_server = server.GameServer() game_server.start() if __name__ == "__main__": try: main() except Exception as e: log.server("server.main:: exception: {}".format(e))