changeset 536:5f38cd163edf

Convert all <msg..>text</msg> messages to proper chat messages
author digitalxero
date Mon, 22 Mar 2010 23:30:27 -0600
parents e4b5be14a8ea
children 63b7f7839475
files orpg/chat/chat_msg.py orpg/main.py orpg/networking/mplay_messaging.py orpg/networking/mplay_server.py
diffstat 4 files changed, 151 insertions(+), 93 deletions(-) [+]
line wrap: on
line diff
--- a/orpg/chat/chat_msg.py	Mon Mar 22 21:22:55 2010 -0600
+++ b/orpg/chat/chat_msg.py	Mon Mar 22 23:30:27 2010 -0600
@@ -29,6 +29,8 @@
 
 __version__ = "$Id: chat_msg.py,v 1.15 2006/11/04 21:24:19 digitalxero Exp $"
 
+from orpg.tools.orpg_log import logger
+
 from orpg.external.etree.ElementTree import ElementTree, Element
 from orpg.external.etree.ElementTree import fromstring, tostring
 
@@ -66,7 +68,7 @@
             chat_node = xml_dom
 
         if chat_node.tag != 'chat':
-            print "Warning: no <chat/> elements found in DOM."
+            logger.general("Warning: no <chat/> elements found in DOM.")
         else:
             self.takedom(chat_node)
 
--- a/orpg/main.py	Mon Mar 22 21:22:55 2010 -0600
+++ b/orpg/main.py	Mon Mar 22 23:30:27 2010 -0600
@@ -53,7 +53,7 @@
 from orpg.tools.settings import settings
 from orpg.tools.orpg_log import logger
 from orpg.tools.validate import validate
-from orpg.tools.decorators import debugging
+from orpg.tools.decorators import debugging, pending_deprecation
 from orpg.tools.metamenus import MenuBarEx
 
 from orpg.external.etree.ElementTree import ElementTree, Element
@@ -1061,17 +1061,19 @@
         elif id == orpg.networking.mplay_client.GROUP_UPDATE:
             self.gs.update_room(data)
 
+
     @debugging
     def on_receive(self, etreeEl, player):
         #recvSound = "RecvSound"
         # this will be the default sound.  Whisper will change this below
         if player:
             display_name = self.chat.chat_display_name(player)
+            display_name = '<b>' + display_name + '</b>: '
         else:
-            display_name = "Server Administrator"
+            display_name = "<b><i><u>Server Administrator</u>-></i></b> "
 
         if etreeEl.text:
-            self.chat.Post(etreeEl.text)
+            self.chat.Post(display_name + etreeEl.text)
 
         for child in etreeEl.getchildren():
             if child.tag == 'tree':
--- a/orpg/networking/mplay_messaging.py	Mon Mar 22 21:22:55 2010 -0600
+++ b/orpg/networking/mplay_messaging.py	Mon Mar 22 23:30:27 2010 -0600
@@ -49,12 +49,15 @@
         try:
             el = fromstring(raw_msg)
         except ExpatError:
+            #Backwards compatibility crap
             end = raw_msg.find(">")
             head = raw_msg[:end+1]
             msg = raw_msg[end+1:]
             el = fromstring(head)
             try:
                 el1 = fromstring(msg)
+                if el1.tag == 'font':
+                    raise ExpatError("")
                 el.append(el1)
             except ExpatError:
                 el.text = msg
--- a/orpg/networking/mplay_server.py	Mon Mar 22 21:22:55 2010 -0600
+++ b/orpg/networking/mplay_server.py	Mon Mar 22 23:30:27 2010 -0600
@@ -218,7 +218,9 @@
                 el1 = fromstring(msg)
                 el.append(el1)
             except ExpatError:
-                el.text = msg
+                chatel = messaging.build('chat', _type='1', version='1.0')
+                chatel.text = msg
+                el.append(chatel)
 
             self.outbox.put(el)
 
@@ -968,9 +970,10 @@
         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')
+        chatel = messaging.build('chat', _type='1', version='1.0')
+        chatel.text = '<font color="#FF0000">' + msg + '</font>'
+        el = messaging.build('msg', to='all', _from='0', group_id='1')
+        el.append(chatel)
         self.send_to_all(0, el)
 
     def console_log(self):
@@ -1210,18 +1213,22 @@
         # send confirmation
         data = self.recvMsg(newsock, new_stub.useCompression,
                             new_stub.compressionType)
+
+        chatEl = messaging.build('chat', version='1.0', _type='1')
         try:
             incEl = messaging.parse(data)
         except ExpatError:
             (remote_host, remote_port) = newsock.getpeername()
-            el = messaging.build('msg', "Your client sent an illegal message",
-                                 "to the server and will be disconnected.",
-                                 "Please report this bug to the development",
-                                 "Team at:<br />",
-                                 '<a href="http://sourceforge.net/tracker/?group_id=2237&atid=102237">OpenRPG bugs',
-                                 "(http://sourceforge.net/tracker/?group_id=2237&atid=102237)</a><br />",
-                                 to=props['id'], _from=props['id'],
+            msg = ['Your client sent an illegal message to the server and',
+                   'will be disconnected. Please report this bug to the',
+                   'development Team at:<br />',
+                   '<a href="http://sourceforge.net/tracker/?group_id=2237&atid=102237">OpenRPG bugs',
+                   '(http://sourceforge.net/tracker/?group_id=2237&atid=102237)</a><br />',]
+
+            chatEl.text = ' '.join(msg)
+            el = messaging.build('msg', to=props['id'], _from=props['id'],
                                  group_id=LOBBY_ID)
+            el.append(chatEl)
             self.sendMsg(newsock, el, new_stub.useCompression,
                          new_stub.compressionType)
 
@@ -1251,11 +1258,13 @@
             version_string += '  Please go to <a href="http://openrpg.digitalxero.net">http://openrpg.digitalxero.net</a> to find a compatible client.<br />'
             version_string += "If you can't find a compatible client on the website, chances are that the server is running an unreleased development version for testing purposes.<br />"
 
-            el = messaging.build('msg', version_string, to=props['id'],
-                                         _from='0', group_id='0')
+            chatEl.text = version_string
+            el = messaging.build('msg', to=props['id'], _from='0',
+                                 group_id='0')
+            el.append(chatEl)
             self.sendMsg(newsock, el, new_stub.useCompression,
                           new_stub.compressionType)
-            #  Give messages time to flow
+            # Give messages time to flow
             time.sleep(1)
             self.log_msg("Connection terminating due to version incompatibility with client (ver: " + props['version'] + "  protocol: " + props['protocol_version'] + ")" )
             newsock.close()
@@ -1268,11 +1277,13 @@
             self.log_msg(cmsg)
             allowed = False
 
-            el = messaging.build('msg', banmsg, to=props['id'],
-                                         _from='0', group_id='0')
+            chatEl.text = banmsg
+            el = messaging.build('msg', to=props['id'], _from='0',
+                                 group_id='0')
+            el.append(chatEl)
             self.sendMsg(newsock, el, new_stub.useCompression,
                          new_stub.compressionType)
-            #  Give messages time to flow
+            # Give messages time to flow
             time.sleep(1)
             newsock.close()
             return None
@@ -1323,11 +1334,13 @@
             err_string += "This error may represent a problem with the server. If you continue to get this message "
             err_string += "please contact the servers administrator to correct the issue.</center> "
 
-            el = messaging.build('msg', err_string, to=props['id'],
-                                 _from=props['id'],group_id='0')
+            chatEl.text = err_string
+            el = messaging.build('msg', to=props['id'], _from=props['id'],
+                                 group_id='0')
+            el.append(chatEl)
             self.sendMsg(newsock, el, new_stub.useCompression,
                          new_stub.compressionType )
-            time.sleep(2)
+            time.sleep(1)
             newsock.close()
             return
 
@@ -1379,8 +1392,10 @@
                 with open(self.userPath + "LobbyMessage.html", "r") as f:
                     lobbyMsg += f.read()
 
-            el = messaging.build('msg', lobbyMsg, to=player_id, _from='0',
-                                 group_id='0')
+            chatel = messaging.build('chat', _type='1', version='1.0')
+            chatel.text = lobbyMsg
+            el = messaging.build('msg', to=player_id, _from='0', group_id='0')
+            el.append(chatel)
 
             # Send the server's lobby message to the client no matter what
             self.sendMsg(socket, el, self.players[player_id].useCompression,
@@ -1429,8 +1444,6 @@
         self.log_msg("server socket listening thread exiting...")
         self.listen_event.set()
 
-
-
     def acceptedNewConnectionThread(self, newsock, addr):
         """
         Once a new connection comes in and is accepted,
@@ -1525,8 +1538,6 @@
         self.log_msg("message handler thread exiting...")
         self.incoming_event.set()
 
-
-
     def parse_incoming_dom(self, data):
         try:
             el = fromstring(data)
@@ -1561,30 +1572,32 @@
         boot_pwd = etreeEL.get("bpw")
         actual_boot_pwd = self.groups[group_id].boot_pwd
 
+        chatEl = messaging.build('chat', _type='1', version='1.0')
+
         if not self.allow_room_passwords:
-            el = messaging.build('msg', "Room passwords have been disabled",
-                                 "by the server administrator.", to=player,
-                                 _from=0, group_id=0)
+            chatEl.text = 'Room passwords have been disabled by the server administrator.'
+            el = messaging.build('msg', to=player, _from=0, group_id=0)
+            el.append(chatEl)
             self.players[player].outbox.put(el)
             return
         elif boot_pwd == actual_boot_pwd:
             if target == "pwd":
                 lmessage = "Room password changed to from \"" + self.groups[group_id].pwd + "\" to \"" + value  + "\" by " + player
                 self.groups[group_id].pwd = value
-                el = messaging.build('msg', 'Room password changed to', value,
-                                     to=player, _from=0, group_id=0)
+                chatEl.text = 'Room password changed to {v}'.format(v=value)
+                el = messaging.build('msg', to=player, _from=0, group_id=0)
+                el.append(chatEl)
                 self.players[player].outbox.put(el)
                 self.log_msg(lmessage)
                 self.send_to_all('0', self.groups[group_id].toxml('update'))
             elif target == "name":
-                el = messaging.build('msg', self.change_group_name(group_id,
-                                                                   value,
-                                                                   player),
-                                     to=player, _from=0, group_id=0)
+                chatEl.text = self.change_group_name(group_id, value, player)
+                el = messaging.build('msg', to=player, _from=0, group_id=0)
+                el.append(chatEl)
                 self.players[player].outbox.put(el)
         else:
-            el = messaging.build('msg', "Invalid Administrator Password.",
-                                 to=player, _from=0, group_id=0)
+            chatEl.text = "Invalid Administrator Password."
+            el = messaging.build('msg', to=player, _from=0, group_id=0)
             self.players[player].outbox.put(el)
 
 
@@ -1611,8 +1624,11 @@
             #because a time was sent return a ping response
             el = messaging.build('ping', time=sent_time)
         else:
-            el = messaging.build('msg', '<font color="#FF0000">PONG!?!</font>',
-                                 to=player, _from=player, group_id=group_id)
+            chatel = messaging.build('chat', _type='1', version='1.0')
+            chatel.text = '<font color="#FF0000">PONG!?!</font>',
+            el = messaging.build('msg', to=player, _from=player,
+                                 group_id=group_id)
+            el.append(chatel)
 
         self.players[player].outbox.put(el)
 
@@ -1754,8 +1770,11 @@
                     self.log_msg(str(e))
 
                 # Spit that darn message out now!
-                el = messaging.build('msg', roomMsg, to=from_id, _from=0,
+                chatel = messaging.build('chat', _type='1', version='1.0')
+                chatel.text = roomMsg
+                el = messaging.build('msg', to=from_id, _from=0,
                                      group_id=group_id)
+                el.append(chatel)
                 self.players[from_id].outbox.put(el)
 
             if self.sendLobbySound and group_id == '0':
@@ -1880,8 +1899,11 @@
                         roomMsg = f.read()
 
                 # Send the rooms message to the client no matter what
-                el = messaging.build('msg', roomMsg, to=from_id, _from=0,
+                chatel = messaging.build('chat', _type='1', version='1.0')
+                chatel.text = roomMsg
+                el = messaging.build('msg', to=from_id, _from=0,
                                      group_id=group_id)
+                el.append(chatel)
                 self.players[from_id].outbox.put(el)
 
         except Exception, e:
@@ -2073,8 +2095,10 @@
                     msg.append(self.players[m].role)
                     msg.append(self.players[m].name)
                     msg.append("<br />")
-            el = messaging.build('msg', ' '.join(msg), to=player, _from=0,
-                                 group_id=group_id)
+            chatel = messaging.build('chat', _type='1', version='1.0')
+            chatel.text = ' '.join(msg)
+            el = messaging.build('msg', to=player, _from=0, group_id=group_id)
+            el.append(chatel)
             self.send(el, player, group_id)
         elif act == "set":
             try:
@@ -2122,8 +2146,11 @@
                     msg = ['<font color="#FF0000">Booting', '(%s)' % to_id,
                            self.players[to_id].name,
                            'from server...</font>']
-                    el = messaging.build('msg', ' '.join(msg), to='all',
-                                         _from=from_id, group_id=group_id)
+                    chatel = messaging.build('chat', _type='1', version='1.0')
+                    chatel.text = ' '.join(msg)
+                    el = messaging.build('msg', to='all', _from=from_id,
+                                         group_id=group_id)
+                    el.append(chatel)
 
                     self.log_msg("boot_msg:" + ' '.join(msg))
 
@@ -2146,13 +2173,15 @@
                     msg = ['<font color="#FF0000">Booting', '(%s)' % to_id,
                            self.players[to_id].name,
                            'from room...</font>']
-                    el = messaging.build('msg', ' '.join(msg), to='all',
-                                         _from=from_id, group_id=group_id)
+                    chatel.text = ' '.join(msg)
+                    el = messaging.build('msg', to='all', _from=from_id,
+                                         group_id=group_id)
+                    el.append(chatel)
 
                     self.log_msg("boot_msg:" + ' '.join(msg))
 
                     self.send_to_group("0", group_id, el)
-                    time.sleep(0.025)
+                    time.sleep(0.0025)
 
                     #dump player into the lobby
                     self.move_player(to_id, "0")
@@ -2179,8 +2208,10 @@
             # Send a message to everyone in the victim's room, letting them know someone has been booted
             msg = ['<font color="#FF0000">Kicking', '(%s)' % (id),
                    self.players[id].name, 'from server...', str(message)]
-            el = messaging.build('msg', ' '.join(msg), to='all', _from=0,
-                                 group_id=group_id)
+            chatel = messaging.build('chat', _type='1', version='1.0')
+            chatel.text = ' '.join(msg)
+            el = messaging.build('msg', to='all', _from=0, group_id=group_id)
+            el.append(chatel)
             self.log_msg("boot_msg:" + ' '.join(msg))
             if (silent == 0):
                 self.send_to_group("0", group_id, el)
@@ -2229,8 +2260,10 @@
             # Send a message to everyone in the victim's room, letting them know someone has been booted
             msg = ['<font color="#FF0000">Banning', '(%s)' % (id),
                    self.players[id].name, 'from server...', str(message)]
-            el = messaging.build('msg', ' '.join(msg), to='all', _from=0,
-                                 group_id=group_id)
+            chatel = messaging.build('chat', _type='1', version='1.0')
+            chatel.text = ' '.join(msg)
+            el = messaging.build('msg', to='all', _from=0, group_id=group_id)
+            el.append(chatel)
             self.log_msg("ban_msg:" + ' '.join(msg))
             if (silent == 0):
                 self.send_to_group("0", group_id, el)
@@ -2439,64 +2472,73 @@
 
             #message now deemed 'authentic'
             #determine action to take based on command (cmd)
+            chatel = messaging.build('chat', _type='1', version='1.0')
 
             if cmd == "list":
                 #return player list to this user.
-                msg = messaging.build('msg', self.player_list_remote(), to=pid,
-                                      _from=0, group_id=gid)
+                chatel.text = self.player_list_remote()
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "banip":
                 ip = etreeEl.get("bip")
                 name = etreeEl.get("bname")
-                msg = messaging.build('msg', 'Banned:', ip, to=pid, _from=0,
-                                      group_id=gid)
+                chatel.text = 'Banned: {ip}'.format(ip=ip)
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.admin_banip(ip, name)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "ban":
                 id = etreeEl.get("bid")
-                msg = messaging.build('msg', 'Banned!', to=id, _from=0,
-                                      group_id=gid)
+                chatel.text = 'Banned!'
+                msg = messaging.build('msg', to=id, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
                 self.admin_ban(id, "")
 
             elif cmd == "unban":
                 ip = etreeEl.get("ip")
                 self.admin_unban(ip)
-                msg = messaging.build('msg', 'Unbanned:', ip, to=pid, _from=0,
-                                      group_id=gid)
+                chatel.text = 'Unbanned {ip}'.format(ip=ip)
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "banlist":
-                msg = messaging.build('msg', self.admin_banlist(), to=pid,
-                                      _from=0, group_id=gid)
+                chatel.text = self.admin_banlist()
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "killgroup":
                 ugid = etreeEl.get("gid")
                 if ugid == "0":
-                    msg = messaging.build('msg', 'Cannot Remove Lobby! Remote',
-                                          'administrator request denied!',
-                                          to=pid, _from=0, group_id=gid)
+                    chatel.text = 'Cannot Remove Lobby! Remote administrator request denied!'
+                    msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                    msg.append(chatel)
                     self.players[pid].outbox.put(m)
                 else:
                     result = self.prune_room(ugid)
-                    msg = messaging.build('msg', str(result), to=pid, _from=0,
-                                          group_id=gid)
+                    chatel.text = str(result)
+                    msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                    msg.append(chatel)
                     self.players[pid].outbox.put(msg)
 
             elif cmd == "message":
                 tuid = etreeEl.get("to_id")
                 msg = etreeEl.get("msg")
-                pmsg = messaging.build('msg', msg, to=tuid, _from=0,
+                chatel.text = msg
+                pmsg = messaging.build('msg', to=tuid, _from=0,
                                        group_id=self.players[tuid].group_id)
+                pmsg.append(chatel)
                 try:
                     self.players[tuid].outbox.put(pmsg)
                 except:
-                    msg = messaging.build('msg', 'Unknown Player ID:',
-                                          'No message sent.', to=pid, _from=0,
-                                          group_id=gid)
+                    chatel.text = 'Unknown Player ID: No message sent.'
+                    msg = messaging.build('msg',  to=pid, _from=0, group_id=gid)
+                    msg.append(chatel)
                     self.players[pid].outbox.put(msg)
 
             elif cmd == "broadcast":
@@ -2508,19 +2550,22 @@
                 self.kill_server()
 
             elif cmd == "uptime":
-                msg = messaging.build('msg', self.uptime(1), to=pid, _from=0,
-                                      group_id=gid)
+                chatel.text = self.uptime(1)
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "help":
-                msg = messaging.build('msg', self.AdminHelpMessage(), to=pid,
-                                      _from=0, group_id=gid)
+                chatel.text = self.AdminHelpMessage()
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "roompasswords":
                 # Toggle if room passwords are allowed on this server
-                msg = messaging.build('msg', self.RoomPasswords(), to=pid,
-                                      _from=0, group_id=gid)
+                chatel.text = self.RoomPasswords()
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put( msg)
 
             elif cmd == "createroom":
@@ -2530,8 +2575,9 @@
                 result = self.create_temporary_persistant_room(rm_name,
                                                                rm_boot, rm_pass)
 
-                msg = messaging.build('msg', result, to=pid, _from=0,
-                                      group_id=gid)
+                chatel.text = result
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "nameroom":
@@ -2539,23 +2585,26 @@
                 rm_name = xml_dom.getAttribute("name")
                 result = self.change_group_name(rm_id,rm_name,pid)
 
-                msg = messaging.build('msg', result, to=pid, _from=0, group_id=gid)
+                chatel.text = result
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
             elif cmd == "passwd":
                 tgid = xml_dom.getAttribute("gid")
                 npwd = xml_dom.getAttribute("pass")
                 if tgid == "0":
-                    msg = messaging.build('msg', 'Server password may not'
-                                          'be changed remotely!', to=pid,
-                                          _from=0, group_id=gid)
+                    chatel.text = 'Server password may not be changed remotely!'
+                    msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                    msg.append(chatel)
                     self.players[pid].outbox.put(msg)
                 else:
                     try:
                         self.groups[tgid].boot_pwd = npwd
-                        msg = messaging.build('msg', 'Password changed for room',
-                                              tgid, to=pid, _from=0,
+                        chatel.text = 'Password changed for room ' + tgid
+                        msg = messaging.build('msg', to=pid, _from=0,
                                               group_id=gid)
+                        msg.append(chatel)
                         self.players[pid].outbox.put(msg)
                     except: pass
 
@@ -2563,14 +2612,16 @@
                 for g in self.groups.itervalues():
                     g.save_map()
 
-                msg = messaging.build('msg', 'Persistent room maps saved', to=pid, _from=0, group_id=gid)
+                chatel.text = 'Persistent room maps saved'
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)
 
 
             else:
-                msg = messaging.build('msg', '<i>[Unknown Remote'
-                                      'Administration Command]</i>', to=pid,
-                                      _from=0, group_id=gid)
+                chatel.text = '<i>[Unknown Remote Administration Command]</i>'
+                msg = messaging.build('msg', to=pid, _from=0, group_id=gid)
+                msg.append(chatel)
                 self.players[pid].outbox.put(msg)