Let's see,
I used the example's custom basic object to create my own basic object
that inherits from the original but started over-riding methods like
return_appearance to return different formatting to rtclient-enhanced
sessions:
if description is not None:
if rtclient:
description = "\xf0<div class='room_desc'>\xf2%s\xf0</
div>\xf2" % (description ,)
retval = (title_format+"\r\n%s") % (
target_obj.get_name(show_dbref=show_dbrefs),
description,
)
else:
retval = title_format % (
target_obj.get_name(show_dbref=show_dbrefs),
)
and added a cmd at the login screen which is automatically run by the
connecting client
from src.cmdtable import GLOBAL_UNCON_CMD_TABLE
from src.config.models import ConfigValue
def cmd_rtclient(command):
"""
Flag the session as supporting rtclient and send a custom hello
"""
session = command.session
session.rtclient = True
login_html = """
<div id='loginForm'>
<div id='existingCharacter'>
<h1>Login</h1>
<form method='post' onsubmit="server.handle('sendInput','connect
'+this.email.value+' '+this.password.value);return false;">
<table>
<tr><td>Email: </td><td><input type='text' name='email'</td></tr>
<tr><td>Password: </td><td><input type='password' name='password'</
td></tr>
<tr><td colspan='2'><input type='submit' value='Log In'> or <a
href='#' onclick='document.getElementById
("existingCharacter").style.display="none";document.getElementById
("createCharacter").style.display="block";return false;'>create a new
character</a></td></tr>
</table>
</form>
</div>
<div id='createCharacter' style='display:none'>
<form method='post' onsubmit="server.handle('sendInput', 'create \
\"'+this.username.value+'\\" '+this.email.value+'
'+this.password.value);return false;">
<h1>Create a Character</h1>
<table>
<tr><td>Username: </td><td><input type='text' name='username'</td></
tr>
<tr><td>Email: </td><td><input type='text' name='email'</td></tr>
<tr><td>Password: </td><td><input type='password' name='password'</
td></tr>
<tr><td colspan='2'><input type='submit' value='Create Character'> or
<a href='#' onclick='document.getElementById
("createCharacter").style.display="none";document.getElementById
("existingCharacter").style.display="block";return false;'>log into
existing character</a></td></tr>
</table>
</form>
</div>
</div>
"""
session.msg("\xf1holder=document.getElementById
('commandOutput');while(holder.hasChildNodes()) holder.removeChild
(holder.lastChild);\xf2\n\xf0"+login_html+"\xf2")
GLOBAL_UNCON_CMD_TABLE.add_command("rtclient", cmd_rtclient)
--Rob
robertj@pr0t0n:~/cvs/evennia/src$ svn diff
Index: ansi.py
===================================================================
--- ansi.py (revision 635)
+++ ansi.py (working copy)
@@ -45,6 +45,13 @@
ansi["return"] = "\r\n"
ansi["tab"] = "\t"
ansi["space"] = " "
+
+ # rtclient control characters
+ ansi["html_start"] = "\xf0"
+ ansi["javascript_start"] = "\xf1"
+ ansi["unformatted_start"] = "\xf2"
+ ansi["start_chunk"] = "\xf3"
+ ansi["end_chunk"] = "\xf4"
class BaseParser(object):
def parse_ansi(self, string, strip_ansi=False,
strip_formatting=False):
@@ -104,6 +111,11 @@
(r'%cC', ANSITable.ansi["back_cyan"]),
(r'%cw', ANSITable.ansi["white"]),
(r'%cW', ANSITable.ansi["back_white"]),
+ (r'%zh', ANSITable.ansi["html_start"]),
+ (r'%zj', ANSITable.ansi["javascript_start"]),
+ (r'%zz', ANSITable.ansi["unformatted_start"]),
+ (r'%zs', ANSITable.ansi["start_chunk"]),
+ (r'%ze', ANSITable.ansi["end_chunk"]),
]
class ExtendedANSIParser(MuxANSIParser):
Index: session.py
===================================================================
--- session.py (revision 635)
+++ session.py (working copy)
@@ -57,6 +57,7 @@
# The time when the user connected.
self.conn_time = time.time()
self.channels_subscribed = {}
+ self.rtclient = False
def disconnectClient(self):
"""
robertj@pr0t0n:~/cvs/evennia/src$
m> wrote:
> Cool! I'd be very interested in any sample code you could supply!
> .
> Griatch
>
> On Jun 15, 3:48 pm, Rob Caskey <
robjcas...@gmail.com> wrote:
>
> >
http://pr0t0n.homeip.net:8080/hasan example of a web-enhanced telnet