Mercurial > openrpg
changeset 535:e4b5be14a8ea
Fix a admin broadcast command
author | digitalxero |
---|---|
date | Mon, 22 Mar 2010 21:22:55 -0600 |
parents | e55283b9b2de |
children | 5f38cd163edf |
files | orpg/dieroller/_base.py orpg/mapper/base_msg.py orpg/networking/mplay_messaging.py orpg/networking/mplay_server.py orpg/tools/orpg_log.py |
diffstat | 5 files changed, 133 insertions(+), 85 deletions(-) [+] |
line wrap: on
line diff
--- a/orpg/dieroller/_base.py Mon Mar 22 19:33:06 2010 -0600 +++ b/orpg/dieroller/_base.py Mon Mar 22 21:22:55 2010 -0600 @@ -215,7 +215,6 @@ return it def register(self, roller): - print roller if not self._rollers.has_key(roller.name): if not isinstance(roller, BaseRoller) and\ isinstance(roller(), BaseRoller):
--- a/orpg/mapper/base_msg.py Mon Mar 22 19:33:06 2010 -0600 +++ b/orpg/mapper/base_msg.py Mon Mar 22 21:22:55 2010 -0600 @@ -29,7 +29,12 @@ from threading import RLock from orpg.networking.mplay_client import * -import orpg.external.etree.ElementTree as ET + +from orpg.tools.orpg_log import logger + +from orpg.external.etree.ElementTree import ElementTree, Element +from orpg.external.etree.ElementTree import fromstring, tostring, iselement +from xml.parsers.expat import ExpatError class map_element_msg_base: # This is a base class @@ -232,20 +237,30 @@ # xml must be pointing to an empty tag. Override in a derived class for <map/> and other similar tags self._from_dom(xml,self.set_prop) - def init_from_xml(self,xmlString): - tree = ET.XML(xmlString) - node_list = tree.findall(self.tagname) + def init_from_xml(self, xmlString): + if isinstance(xmlString, basestring): + tree = fromstring(xmlString) + else: + tree = xmlString + node_list = tree.findall(self.tagname) or [tree] if len(node_list) < 1: - print "Warning: no <" + self.tagname + "/> elements found in DOM." + logger.general("Warning: no <{tagname}/> elements found in DOM.\n"\ + "Found {tag}".format(tagname=self.tagname, + tag=tree.tag)) else: while len(node_list): self.init_from_dom(node_list.pop()) - def set_from_xml(self,xmlString): - tree = ET.XML(xmlString) - node_list = tree.findall(self.tagname) + def set_from_xml(self, xmlString): + if isinstance(xmlString, basestring): + tree = fromstring(xmlString) + else: + tree = xmlString + node_list = tree.findall(self.tagname) or [tree] if len(node_list) < 1: - print "Warning: no <" + self.tagname + "/> elements found in DOM." + logger.general("Warning: no <{tagname}/> elements found in DOM.\n"\ + "Found {tag}".format(tagname=self.tagname, + tag=tree.tag)) else: while len(node_list): self.set_from_dom(node_list.pop())
--- a/orpg/networking/mplay_messaging.py Mon Mar 22 19:33:06 2010 -0600 +++ b/orpg/networking/mplay_messaging.py Mon Mar 22 21:22:55 2010 -0600 @@ -1,3 +1,4 @@ +from orpg.tools.orpg_log import logger from orpg.external.etree.ElementTree import ElementTree, Element from orpg.external.etree.ElementTree import fromstring, tostring, iselement from xml.parsers.expat import ExpatError @@ -57,7 +58,7 @@ el.append(el1) except ExpatError: el.text = msg - logger.general("Bad Message: \n" + data) + logger.general("Bad Message: \n" + raw_msg) return el
--- a/orpg/networking/mplay_server.py Mon Mar 22 19:33:06 2010 -0600 +++ b/orpg/networking/mplay_server.py Mon Mar 22 21:22:55 2010 -0600 @@ -913,57 +913,74 @@ self.log_msg("Server stopped!") def log_msg(self, msg): - if self.log_to_console: - logger.note(msg, True) - else: - logger.note(msg) + logger.note(msg) def print_help(self): #FIXME# - print - print "Commands: " - print "'kill' or 'quit' - to stop the server" - print "'broadcast' - broadcast a message to all players" - print "'list' - list players and groups" - print "'dump' - to dump player data" - print "'dump groups' - to list the group names and ids only" - print "'group n' - to list details about one group only" - print "'register' - To register the server as name. Also used to change the server's name if registered." - print "'unregister' - To remove this server from the list of servers" - print "'get lobby boot password' - to show the Lobby's boot password" - print "'set lobby boot password' - to set the Lobby's boot password" - print "'log' - toggles logging to the console off or on" - print "'log meta' - toggles logging of meta server messages on or off" - print "'logfile [off|on|split]' - timestamped network traffic log" - print "'remove room' - to remove a room from the server" - print "'kick' - kick a player from the server" - print "'ban' - ban a player from the server" - print "'remotekill' - This will toggle the ability to kill the server via the /admin command" - print "'monitor (#)' - monitors raw network I/O stream to specific client" - print "'purge clients' - boots all connected clients off the server immediately" - print "'zombie [set [min]]' - view/set the auto-kick time for zombie clients" - print "'uptime' - reports how long server has been running" - print "'roompasswords' - allow/disallow room passwords (toggle)" - print "'search' - will prompt for pattern and display results" - print "'sendsize' - will ajust the send size limit" - print "'remoteadmin' - will toggle remote admin commands" - print "'togglelobbysound' - Will turn on or off the Auto sending of a sound to all players who join the loby" - print "'lobbysound' - Lets you specify which sound file to send to players joining the lobby" - print "'help' or '?' or 'h' - for this help message" - print + logger.info('', True) + logger.info("Commands: ", True) + logger.info("'kill' or 'quit' - to stop the server", True) + logger.info("'broadcast' - broadcast a message to all players", True) + logger.info("'list' - list players and groups", True) + logger.info("'dump' - to dump player data", True) + logger.info("'dump groups' - to list the group names and ids only", + True) + logger.info("'group n' - to list details about one group only", True) + logger.info("'register' - To register the server as name. "\ + "Also used to change the server's name if registered.", + True) + logger.info("'unregister' - To remove this server from the "\ + "list of servers", True) + logger.info("'get lobby boot password' - to show the Lobby's "\ + "boot password", True) + logger.info("'set lobby boot password' - to set the Lobby's "\ + "boot password", True) + logger.info("'log' - toggles logging to the console off or on", True) + logger.info("'log meta' - toggles logging of meta server "\ + "messages on or off", True) + logger.info("'logfile [off|on|split]' - timestamped network "\ + "traffic log", True) + logger.info("'remove room' - to remove a room from the server", True) + logger.info("'kick' - kick a player from the server", True) + logger.info("'ban' - ban a player from the server", True) + logger.info("'remotekill' - This will toggle the ability to kill "\ + "the server via the /admin command", True) + logger.info("'monitor (#)' - monitors raw network I/O stream "\ + "to specific client", True) + logger.info("'purge clients' - boots all connected clients "\ + "off the server immediately", True) + logger.info("'zombie [set [min]]' - view/set the auto-kick time "\ + "for zombie clients", True) + logger.info("'uptime' - reports how long server has been running", + True) + logger.info("'roompasswords' - allow/disallow room passwords (toggle)", + True) + logger.info("'search' - will prompt for pattern and display results", + True) + logger.info("'sendsize' - will ajust the send size limit", True) + logger.info("'remoteadmin' - will toggle remote admin commands", True) + logger.info("'togglelobbysound' - Will turn on or off the "\ + "Auto sending of a sound to all players who join the loby", + True) + logger.info("'lobbysound' - Lets you specify which sound file "\ + "to send to players joining the lobby", True) + logger.info("'help' or '?' or 'h' - for this help message", True) + logger.info('', True) def broadcast(self, msg): msg = '<font color="#FF0000">' + msg + '</font>' el = messaging.build('msg', msg, to='all', _from='0', group_id='1') - self.send_to_all(el) + self.send_to_all(0, el) def console_log(self): self.log_to_console = not self.log_to_console if not self.log_to_console: - print "console logging now off" + logger.info("console logging now off", True) + logger.log_to_consol = False else: - print "console logging now on" + logger.info("console logging now on", True) + logger.log_to_consol = True def groups_list(self): #CLEANUP# @@ -977,7 +994,7 @@ pw = "P" if self.isPersistentRoom( k ): pr = " S" #using S for static (P for persistant conflicts with password) - print "Group: " + k + pr + pw + ' Name: ' + self.groups[k].name + logger.info("Group: " + k + pr + pw + ' Name: ' + self.groups[k].name, True) print except Exception, e: @@ -1003,7 +1020,7 @@ def search(self,patern): keys = self.groups.keys() - print "Search results:" + logger.info("Search results:", True) for k in keys: ids = self.groups[k].get_player_ids() for id in ids: @@ -1031,9 +1048,11 @@ elif self.players[id].client_string.find(patern)>-1: self.print_player_info(self.players[id]) - def print_player_info(self,player): - #CLEANUP# - print player.id,player.name,player.ip,player.group_id, player.role,player.version,player.protocol_version,player.client_string + def print_player_info(self, player): + msg = '{player.id}, {player.name}, {player.ip}, {player.group_id}, '\ + '{player.role}, {player.version}, {player.protocol_version}, '\ + '{player.client_string}'.format(player=player) + logger.info(msg, True) def uptime(self , mode = 0): """ @@ -1058,18 +1077,18 @@ return "Client Created Room Passwords: Allowed" - def group_dump(self,k): - #CLEANUP# + def group_dump(self, k): with self.p_lock: try: - print "Group: " + k - print " Name: %s" % self.groups[k].name - print " Desc: %s" % self.groups[k].desc - print " Pass: %s" % self.groups[k].pwd - print " Boot: %s" % self.groups[k].boot_pwd - print " Moderated: %s" % self.groups[k].moderated - print " Map: %s" % self.groups[k].game_map.get_all_xml() - print + msg = ['Group: {group.id}'] + msg.append(' Name: {group.name}') + msg.append(' Desc: {group.desc}') + msg.append(' Pass: {group.pwd}') + msg.append(' Boot: {group.boot_pwd}') + msg.append(' Moderated: {group.moderated}') + msg.append(' Map: {map_xml}\n') + logger.info('\n'.join(msg).format(group=self.groups[k], + map_xml=self.groups[k].game_map.get_all_xml()), True) except Exception, e: self.log_msg(str(e)) @@ -1080,25 +1099,35 @@ """ with self.p_lock: try: - print "------------[ PLAYER LIST ]------------" + logger.info("------------[ PLAYER LIST ]------------", True) keys = self.groups.keys() keys.sort(id_compare) for k in keys: groupstring = "Group " + str(k) + ": " + self.groups[k].name if self.groups[k].pwd != "": groupstring += " (Pass: \"" + self.groups[k].pwd + "\" )" - print groupstring + logger.info(groupstring, True) ids = self.groups[k].get_player_ids() ids.sort(id_compare) for id in ids: if self.players.has_key(id): - print " (%s)%s [IP: %s] %s (%s)" % ((self.players[id]).id, (self.players[id]).name, (self.players[id]).ip, (self.players[id]).idle_status(), (self.players[id]).connected_time_string()) + msg = " ({player.id}){player.name} "\ + "[IP: {player.ip}] {idle_status} "\ + "({connected})".format(player=self.players[id], + idle_status=(self.players[id]).idle_status(), + connected=(self.players[id]).connected_time_string()) + logger.info(msg, True) else: self.groups[k].remove_player(id) - print "Bad Player Ref (#" + id + ") in group" - if len(ids) > 0: print "" - print "--------------------------------------" - print "\nStatistics: groups: " + str(len(self.groups)) + " players: " + str(len(self.players)) + msg = "Bad Player Ref (#{id}) in group".format(id=id) + logger.general(msg, True) + if len(ids) > 0: + logger.info('', True) + logger.info("--------------------------------------", True) + msg = "\nStatistics: groups: {num_groups} "\ + "players: {num_players}".format(num_groups=len(self.groups), + num_players=len(self.players)) + logger.info(msg, True) except Exception, e: self.log_msg(str(e)) @@ -1108,15 +1137,18 @@ try: keys = self.groups.keys() for k in keys: - print "Group: %s %s (pass: \"%s\")" % (str(k),self.groups[k].name, self.groups[k].pwd) + msg = 'Group: {group.id} {group.name} (pass: "{group.pwd}"' + + logger.info(msg.format(group=self.groups[k]), True) ids = self.groups[k].get_player_ids() for id in ids: if self.players.has_key(id): - print str(self.players[id]) + logger.info(self.players[id], True) else: self.groups[k].remove_player(id) - print "Bad Player Ref (#" + id + ") in group" + msg = "Bad Player Ref (#{id}) in group" + logger.general(msg.format(id=id), True) except Exception, e: self.log_msg(str(e)) @@ -1417,8 +1449,7 @@ try: newsock.close() except Exception, e: - self.log_msg(str(e)) - print str(e) + logger.exception(traceback.format_exc()) return #returning causes connection thread instance to terminate @@ -1640,7 +1671,7 @@ if self.groups[group_id].voice.has_key(i.strip()): del self.groups[group_id].voice[i.strip()] else: - print "Bad input: " + data + logger.general("Bad input: " + data) except Exception,e: self.log_msg(str(e)) @@ -1960,7 +1991,8 @@ msg = data[end+1:] if from_id == "0" or len(from_id) == 0: - print "WARNING!! Message received with an invalid from_id. Message dropped." + logger.general("WARNING!! Message received with "\ + "an invalid from_id. Message dropped.", True) return None if etreeEl.text: @@ -2014,7 +2046,8 @@ group_id = etreeEl.get("group_id") if from_id == "0" or len(from_id) == 0: - print "WARNING!! Message received with an invalid from_id. Message dropped." + logger.general("WARNING!! Message received with an "\ + "invalid from_id. Message dropped.") return None if to_id == 'all': @@ -2063,11 +2096,10 @@ self.players[player].outbox.put(el) self.log_msg( "Administrator passwords did not match") except Exception, e: - print e - print "Error executing the role change" - print "due to the following exception:" + logger.exception("Error executing the role change") + logger.exception("due to the following exception:") logger.exception(traceback.format_exc()) - print "Ignoring boot message" + logger.exception("Ignoring boot message") def handle_boot(self, from_id, to_id, group_id, etreeEl): given_boot_pwd = etreeEl.get('boot_pwd') @@ -2132,7 +2164,7 @@ el = messaging.build('password', signal='fail', data='', id=group_id, type='admin') self.players[from_id].outbox.put(el) - print "boot passwords did not match" + logger.general("boot passwords did not match") except Exception, e: logger.exception(traceback.format_exc())
--- a/orpg/tools/orpg_log.py Mon Mar 22 19:33:06 2010 -0600 +++ b/orpg/tools/orpg_log.py Mon Mar 22 21:22:55 2010 -0600 @@ -94,7 +94,8 @@ self.log(msg, self.CRITICAL, to_console) def log(self, msg, log_type, to_console=False): - if self.log_to_console or to_console or log_type == self.CRITICAL: + if self.log_to_console or to_console or log_type == self.CRITICAL or\ + log_type & self.log_level: self._io.line(str(msg), **self._lvl_args[log_type]['colorizer'])