Clarify mapping from Evennia-outputfuncs to GMCP-style cmdnames

This commit is contained in:
Griatch 2018-01-25 10:41:49 +01:00
parent 607741872c
commit e23cfb5d67

View file

@ -229,24 +229,41 @@ class TelnetOOB(object):
IRE games use, supposedly, and what clients appear IRE games use, supposedly, and what clients appear
to have adopted): to have adopted):
[cmdname, [], {}] -> cmdname [cmd.name, [], {}] -> Cmd.Name
[cmdname, [arg], {}] -> cmdname arg [cmd.name, [arg], {}] -> Cmd.Name arg
[cmdname, [args],{}] -> cmdname [args] [cmd.name, [args],{}] -> Cmd.Name [args]
[cmdname, [], {kwargs}] -> cmdname {kwargs} [cmd.name, [], {kwargs}] -> Cmd.Name {kwargs}
[cmdname, [args, {kwargs}] -> cmdname [[args],{kwargs}] [cmdname, [args, {kwargs}] -> Custom.Cmdname [[args],{kwargs}]
Notes:
There are also a few default mappings between evennia outputcmds and
GMCP:
client_options -> Core.Supports.Get
get_inputfuncs -> Core.Commands.Get
get_value -> Char.Value.Get
repeat -> Char.Repeat.Update
monitor -> Char.Monitor.Update
""" """
if cmdname in EVENNIA_TO_GMCP:
gmcp_cmdname = EVENNIA_TO_GMCP[cmdname]
elif "_" in cmdname:
gmcp_cmdname = ".".join(word.capitalize() for word in cmdname.split("_"))
else:
gmcp_cmdname = "Custom.%s" % cmdname.capitalize()
if not (args or kwargs): if not (args or kwargs):
gmcp_string = cmdname gmcp_string = gmcp_cmdname
elif args: elif args:
if len(args) == 1: if len(args) == 1:
args = args[0] args = args[0]
if kwargs: if kwargs:
gmcp_string = "%s %s" % (cmdname, json.dumps([args, kwargs])) gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps([args, kwargs]))
else: else:
gmcp_string = "%s %s" % (cmdname, json.dumps(args)) gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps(args))
else: # only kwargs else: # only kwargs
gmcp_string = "%s %s" % (cmdname, json.dumps(kwargs)) gmcp_string = "%s %s" % (gmcp_cmdname, json.dumps(kwargs))
# print("gmcp string", gmcp_string) # DEBUG # print("gmcp string", gmcp_string) # DEBUG
return gmcp_string return gmcp_string
@ -398,14 +415,9 @@ class TelnetOOB(object):
kwargs.pop("options", None) kwargs.pop("options", None)
if self.MSDP: if self.MSDP:
msdp_cmdname = cmdname encoded_oob = self.encode_msdp(cmdname, *args, **kwargs)
encoded_oob = self.encode_msdp(msdp_cmdname, *args, **kwargs)
self.protocol._write(IAC + SB + MSDP + encoded_oob + IAC + SE) self.protocol._write(IAC + SB + MSDP + encoded_oob + IAC + SE)
if self.GMCP: if self.GMCP:
if cmdname in EVENNIA_TO_GMCP: encoded_oob = self.encode_gmcp(cmdname, *args, **kwargs)
gmcp_cmdname = EVENNIA_TO_GMCP[cmdname]
else:
gmcp_cmdname = "Custom.Cmd"
encoded_oob = self.encode_gmcp(gmcp_cmdname, *args, **kwargs)
self.protocol._write(IAC + SB + GMCP + encoded_oob + IAC + SE) self.protocol._write(IAC + SB + GMCP + encoded_oob + IAC + SE)