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'])