mirror of
https://github.com/evennia/evennia.git
synced 2026-03-24 08:46:31 +01:00
Implement the MSDP/GMCP wrappers for the backend inlinefuncs as per #924. It's not fully tested yet though.
This commit is contained in:
parent
8709ffefb8
commit
4f02ec1cbe
3 changed files with 74 additions and 20 deletions
|
|
@ -159,11 +159,21 @@ def client_options(session, *args, **kwargs):
|
|||
|
||||
def get_client_options(session, *args, **kwargs):
|
||||
"""
|
||||
Alias wrapper for getting options
|
||||
Alias wrapper for getting options.
|
||||
"""
|
||||
client_options(session, get=True)
|
||||
|
||||
|
||||
def get_inputfuncs(session, *args, **kwargs):
|
||||
"""
|
||||
Get the keys of all available inputfuncs. Note that we don't get
|
||||
it from this module alone since multiple modules could be added.
|
||||
So we get it from the sessionhandler.
|
||||
"""
|
||||
inputfuncsdict = dict((key, func.__doc__) for key, func in session.sessionhandler.get_inputfuncs().iterkeys())
|
||||
session.msg(get_inputfuncs=inputfuncsdict)
|
||||
|
||||
|
||||
def login(session, *args, **kwargs):
|
||||
"""
|
||||
Peform a login. This only works if session is currently not logged
|
||||
|
|
@ -212,12 +222,13 @@ def _testrepeat(**kwargs):
|
|||
session (Session): Session to return to.
|
||||
"""
|
||||
import time
|
||||
kwargs["session"].msg("Repeat called: %s" % time.time())
|
||||
kwargs["session"].msg(repeat="Repeat called: %s" % time.time())
|
||||
|
||||
|
||||
_repeatable = {"test1": _testrepeat, # example only
|
||||
"test2": _testrepeat} # "
|
||||
|
||||
|
||||
def repeat(session, *args, **kwargs):
|
||||
"""
|
||||
Call a named function repeatedly. Note that
|
||||
|
|
@ -258,6 +269,7 @@ _monitorable = {
|
|||
"desc": "desc"
|
||||
}
|
||||
|
||||
|
||||
def _on_monitor_change(**kwargs):
|
||||
fieldname = kwargs["fieldname"]
|
||||
obj = kwargs["obj"]
|
||||
|
|
@ -265,6 +277,7 @@ def _on_monitor_change(**kwargs):
|
|||
session = kwargs["session"]
|
||||
session.msg(monitor={"name": name, "value": _GA(obj, fieldname)})
|
||||
|
||||
|
||||
def monitor(session, *args, **kwargs):
|
||||
"""
|
||||
Adds monitoring to a given property or Attribute.
|
||||
|
|
@ -289,6 +302,7 @@ def monitor(session, *args, **kwargs):
|
|||
MONITOR_HANDLER.add(obj, field_name, _on_monitor_change, idstring=session.sessid,
|
||||
persistent=False, name=name, session=session)
|
||||
|
||||
|
||||
def unmonitor(session, *args, **kwargs):
|
||||
"""
|
||||
Wrapper for turning off monitoring
|
||||
|
|
@ -298,21 +312,20 @@ def unmonitor(session, *args, **kwargs):
|
|||
|
||||
|
||||
# aliases for GMCP
|
||||
core_hello = client_options # Core.Hello
|
||||
core_supports_set = client_options # Core.Supports.Set
|
||||
core_supports_get = get_client_options # Core.Supports.Get
|
||||
char_login = login # Char.Login
|
||||
char_value_get = get_value # Char.Value.Get
|
||||
char_repeat_on = repeat # Char.Repeat.On
|
||||
char_repeat_off = unrepeat # Char.Repeat.Off
|
||||
char_monitor_on = monitor # Char.Monitor.On
|
||||
char_monitor_off = unmonitor # Char.Monitor.Off
|
||||
gmcp_core_hello = client_options # Core.Hello
|
||||
gmcp_core_supports_set = client_options # Core.Supports.Set
|
||||
gmcp_core_supports_get = get_client_options # Core.Supports.Get
|
||||
gmcp_core_commands_get = get_inputfuncs # Core.Commands.Get
|
||||
gmcp_char_login = login # Char.Login
|
||||
gmcp_char_value_get = get_value # Char.Value.Get
|
||||
gmcp_char_repeat_on = repeat # Char.Repeat.On
|
||||
gmcp_char_repeat_off = unrepeat # Char.Repeat.Off
|
||||
gmcp_char_monitor_on = monitor # Char.Monitor.On
|
||||
gmcp_char_monitor_off = unmonitor # Char.Monitor.Off
|
||||
|
||||
# aliases for MSDP
|
||||
msdp_send = get_value # SEND
|
||||
msdp_repeat = repeat # REPEAT
|
||||
msdp_unrepeat = unrepeat # UNREPEAT
|
||||
msdp_report = monitor # REPORT
|
||||
mspd_unreport = unmonitor # UNREPORT
|
||||
|
||||
|
||||
SEND = get_value # SEND
|
||||
REPEAT = repeat # REPEAT
|
||||
UNREPEAT = unrepeat # UNREPEAT
|
||||
MONITOR = monitor # REPORT
|
||||
LIST = get_inputfuncs # LIST
|
||||
|
|
|
|||
|
|
@ -61,6 +61,19 @@ msdp_regex_array = re.compile(r"%s\s*(\w*?)\s*%s\s*%s(.*?)%s" % (MSDP_VAR, MSDP_
|
|||
msdp_regex_var = re.compile(r"%s" % MSDP_VAR)
|
||||
msdp_regex_val = re.compile(r"%s" % MSDP_VAL)
|
||||
|
||||
EVENNIA_TO_MSDP = {"client_options": "OPTIONS",
|
||||
"get_inputfuncs": "LIST",
|
||||
"get_value": "SEND",
|
||||
"repeat": "REPEAT",
|
||||
"monitor": "REPORT"}
|
||||
|
||||
EVENNIA_TO_GMCP = {"client_options": "Core.Supports.Get",
|
||||
"get_inputfuncs": "Core.Commands.Get",
|
||||
"get_value": "Char.Value.Get",
|
||||
"repeat": "Char.Repeat.Update",
|
||||
"monitor": "Char.Monitor.Update"}
|
||||
|
||||
|
||||
# MSDP output templates
|
||||
|
||||
# cmdname
|
||||
|
|
@ -374,6 +387,14 @@ class TelnetOOB(object):
|
|||
args = list(structure)
|
||||
else:
|
||||
args = (structure,)
|
||||
if cmdname.startswith("Custom.Cmd."):
|
||||
# if Custom.Cmd.Cmdname, then use Cmdname
|
||||
cmdname = cmdname[11:]
|
||||
else:
|
||||
# not a custom command - convert the input name to a
|
||||
# Python form such that Core.Supports.Get ->
|
||||
# gmcp_core_supports_get
|
||||
cmdname = "gmcp_%s" % "_".join(part.lower() for part in cmdname.split("."))
|
||||
print "gmcp data in:", {cmdname: [args, kwargs]}
|
||||
self.protocol.data_in(**{cmdname: [args, kwargs]})
|
||||
|
||||
|
|
@ -389,10 +410,21 @@ class TelnetOOB(object):
|
|||
|
||||
"""
|
||||
if self.MSDP:
|
||||
encoded_oob = self.encode_msdp(cmdname, *args, **kwargs)
|
||||
if cmdname in EVENNIA_TO_MSDP:
|
||||
msdp_cmdname = EVENNIA_TO_MSDP[cmdname]
|
||||
else:
|
||||
msdp_cmdname = "CUSTOM"
|
||||
kwargs["cmdname"] = cmdname
|
||||
encoded_oob = self.encode_msdp(msdp_cmdname, *args, **kwargs)
|
||||
print "sending MSDP:", encoded_oob
|
||||
self.protocol._write(IAC + SB + MSDP + encoded_oob + IAC + SE)
|
||||
|
||||
if self.GMCP:
|
||||
encoded_oob = self.encode_gmcp(cmdname, *args, **kwargs)
|
||||
if cmdname in EVENNIA_TO_GMCP:
|
||||
gmcp_cmdname = EVENNIA_TO_GMCP[cmdname]
|
||||
else:
|
||||
gmcp_cmdname = "Custom.Cmd"
|
||||
kwargs["cmdname"] = cmdname
|
||||
encoded_oob = self.encode_gmcp(gmcp_cmdname, *args, **kwargs)
|
||||
print "sending GMCP:", encoded_oob
|
||||
self.protocol._write(IAC + SB + GMCP + encoded_oob + IAC + SE)
|
||||
|
|
|
|||
|
|
@ -621,6 +621,15 @@ class ServerSessionHandler(SessionHandler):
|
|||
self.server.amp_protocol.send_MsgServer2Portal(session,
|
||||
**kwargs)
|
||||
|
||||
def get_inputfuncs(self):
|
||||
"""
|
||||
Get all registered inputfuncs (access function)
|
||||
|
||||
Returns:
|
||||
inputfuncs (dict): A dict of {key:inputfunc,...}
|
||||
"""
|
||||
return _INPUT_FUNCS
|
||||
|
||||
def data_in(self, session, **kwargs):
|
||||
"""
|
||||
Data Portal -> Server.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue