Updated webclient to use the latest refactored oob syntax.

This commit is contained in:
Griatch 2015-02-15 11:49:36 +01:00
parent a7e9ab7030
commit b3c8a37f89
3 changed files with 56 additions and 48 deletions

View file

@ -416,7 +416,7 @@ class OOBHandler(TickerHandler):
_OOB_ERROR(session, errmsg, *args, **kwargs) _OOB_ERROR(session, errmsg, *args, **kwargs)
errmsg = "OOB ERROR: %s" % errmsg errmsg = "OOB ERROR: %s" % errmsg
logger.log_trace(errmsg) logger.log_trace(errmsg)
raise return
# we found an oob command. Execute it. # we found an oob command. Execute it.
try: try:
@ -427,7 +427,6 @@ class OOBHandler(TickerHandler):
_OOB_ERROR(session, errmsg, *args, **kwargs) _OOB_ERROR(session, errmsg, *args, **kwargs)
errmsg = "OOB ERROR: %s" % errmsg errmsg = "OOB ERROR: %s" % errmsg
logger.log_trace(errmsg) logger.log_trace(errmsg)
raise
# access object # access object

View file

@ -86,7 +86,7 @@ class WebSocketClient(Protocol, Session):
if mode == "OOB": if mode == "OOB":
# an out-of-band command # an out-of-band command
self.decode_json(data) self.json_decode(data)
elif mode == "CMD": elif mode == "CMD":
# plain text input # plain text input
self.data_in(text=data) self.data_in(text=data)
@ -107,7 +107,7 @@ class WebSocketClient(Protocol, Session):
except Exception: except Exception:
log_trace("Websocket malformed OOB request: %s" % data) log_trace("Websocket malformed OOB request: %s" % data)
raise raise
self.sessionhandler.data_in(oob=(cmdname, args, kwargs)) self.sessionhandler.data_in(self, oob=(cmdname, args, kwargs))
def json_encode(self, cmdname, *args, **kwargs): def json_encode(self, cmdname, *args, **kwargs):
""" """
@ -143,7 +143,7 @@ class WebSocketClient(Protocol, Session):
self.sendLine(str(e)) self.sendLine(str(e))
if "oob" in kwargs: if "oob" in kwargs:
for cmdname, args, okwargs in kwargs["oob"]: for cmdname, args, okwargs in kwargs["oob"]:
self.encode_json(cmdname, *args, **okwargs) self.json_encode(cmdname, *args, **okwargs)
raw = kwargs.get("raw", False) raw = kwargs.get("raw", False)
nomarkup = kwargs.get("nomarkup", False) nomarkup = kwargs.get("nomarkup", False)

View file

@ -16,7 +16,7 @@ messages sent to the client is one of two modes:
// If on, allows client user to send OOB messages to server by // If on, allows client user to send OOB messages to server by
// prepending with ##OOB{}, for example ##OOB{"echo":[1,2,3,4]} // prepending with ##OOB{}, for example ##OOB{"echo":[1,2,3,4]}
var OOB_debug = true var DEBUG = true
// //
// Custom OOB functions // Custom OOB functions
@ -56,7 +56,7 @@ function err (args, kwargs) {
doShow("err", args) } doShow("err", args) }
// Map above functions with oob command names // Map above functions with oob command names
var CMD_MAP = {"ECHO":echo, "LIST":list, "SEND":send, "REPORT":report, "error":err}; var CMD_MAP = {"echo":echo, "LIST":list, "SEND":send, "REPORT":report, "error":err};
// //
// Webclient code // Webclient code
@ -96,19 +96,18 @@ function onMessage(evt) {
var mode = inmsg.substr(0, 3); var mode = inmsg.substr(0, 3);
var message = inmsg.slice(3); var message = inmsg.slice(3);
if (mode == "OOB") { if (mode == "OOB") {
// dynamically call oob methods, if available // dynamically call oob methods if available
// The variables are come on the form [(cmname, [args], {kwargs}), ...] // The incoming data is on the form [cmdname, [args], {kwargs}]
var oobcmds = JSON.parse(message);
try { try {
if (oobcmds instanceof Array == false) { if (message.length < 1) {
throw "oob instruction's outermost level must be an Array."; throw "Usage: ##OOB [[commandname, [args], {kwargs}], ...]"
} }
for (var icmd = 0; i < oobcmds.length; icmd++) { var oobcmd = JSON.parse(message);
doShow("debug", "Received OOB: " + message + " parsed: " + oobcmd);
// call each command tuple in turn // call each command tuple in turn
var cmdname = oobcmds[icmd][0]; var cmdname = oobcmd[0];
var args = oobcmds[icmd][1]; var args = oobcmd[1];
var kwargs = oobcmds[icmd][2]; var kwargs = oobcmd[2];
// match cmdname with a command existing in the // match cmdname with a command existing in the
// CMD_MAP mapping // CMD_MAP mapping
if (cmdname in CMD_MAP == false) { if (cmdname in CMD_MAP == false) {
@ -124,7 +123,6 @@ function onMessage(evt) {
doShow("err", "Client could not execute OOB function" + "cmdname" + "(" + args + kwargs + ")."); doShow("err", "Client could not execute OOB function" + "cmdname" + "(" + args + kwargs + ").");
} }
} }
}
catch(error) { catch(error) {
doShow("err", error); doShow("err", error);
} }
@ -154,29 +152,31 @@ function doSend(){
HISTORY_POS = 0; HISTORY_POS = 0;
$('#inputform')[0].reset(); // clear input field $('#inputform')[0].reset(); // clear input field
if (OOB_debug && outmsg.length > 4 && outmsg.substr(0, 5) == "##OOB") { if (outmsg.length > 4 && outmsg.substr(0, 5) == "##OOB") {
// OOB direct input // OOB direct input
var outmsg = outmsg.slice(5); var outmsg = outmsg.slice(5);
if (outmsg == "UNITTEST") { if (outmsg == "UNITTEST") {
// unittest mode // unittest mode
doShow("out", "OOB testing mode ..."); doShow("out", "OOB testing mode ...");
doOOB(JSON.parse('{"ECHO":"Echo test"}')); doOOB(["ECHO", ["Echo test"]]);
doOOB(JSON.parse('{"LIST":"COMMANDS"}')); doOOB(["LIST", ["COMMANDS"]]);
doOOB(JSON.parse('{"SEND":"CHARACTER_NAME"}')); doOOB(["SEND", ["CHARACTER_NAME"]]);
doOOB(JSON.parse('{"REPORT":"TEST"}')); doOOB(["REPORT", ["TEST"]]);
doOOB(JSON.parse('{"UNREPORT":"TEST"}')); doOOB(["UNREPORT", ["TEST"]]);
doOOB(JSON.parse('{"REPEAT": 1}')); doOOB(["REPEAT", [1, "ECHO"]]);
doOOB(JSON.parse('{"UNREPEAT": 1}')); doOOB(["UNREPEAT", [1, "ECHO"]]);
doShow("out", "... OOB testing mode done."); doShow("out", "... OOB testing mode done.");
return return
} }
// send a manual OOB instruction // send a manual OOB instruction
try { try {
doShow("out", "OOB input: " + outmsg); doShow("debug", "OOB input: " + outmsg);
if (outmsg.length == 5) { if (outmsg.length == 0) {
doShow("err", "OOB syntax: ##OOB[\"cmdname\", [args], {kwargs}]"); } throw "Usage: ##OOB [[commandname, [args], {kwargs}], ...]";
}
else { else {
doOOB(JSON.parse(outmsg.slice(5))); } doOOB(outmsg);
}
} }
catch(err) { catch(err) {
doShow("err", err) doShow("err", err)
@ -190,6 +190,7 @@ function doSend(){
function doOOB(cmdstring){ function doOOB(cmdstring){
// Send OOB data from client to Evennia. // Send OOB data from client to Evennia.
// Takes input strings with syntax ["cmdname", args, kwargs] // Takes input strings with syntax ["cmdname", args, kwargs]
doShow("debug", "into doOOB... " + cmdstring)
try { try {
var cmdtuple = JSON.parse(cmdstring); var cmdtuple = JSON.parse(cmdstring);
var oobmsg = ""; var oobmsg = "";
@ -201,7 +202,6 @@ function doOOB(cmdstring){
switch (cmdtuple.length) { switch (cmdtuple.length) {
case 0: case 0:
throw "No command given"; throw "No command given";
return
case 1: case 1:
// [cmdname] // [cmdname]
oobmsg = [cmdtuple[0], [], {}]; oobmsg = [cmdtuple[0], [], {}];
@ -215,8 +215,7 @@ function doOOB(cmdstring){
oobmsg = [cmdtuple[0], cmdtuple[1], cmdtuple[2]]; oobmsg = [cmdtuple[0], cmdtuple[1], cmdtuple[2]];
break; break;
default: default:
errmsg = "Malformed OOB instruction:" + cmdstring throw "Malformed OOB instruction: " + cmdstring;
return
} }
// convert to string and send it to the server // convert to string and send it to the server
oobmsg = JSON.stringify(oobmsg); oobmsg = JSON.stringify(oobmsg);
@ -224,7 +223,7 @@ function doOOB(cmdstring){
} }
} }
catch(error) { catch(error) {
doSend("err", "OOB output " + cmdtuple + " is not on the right form: " + error); doShow("err", "OOB output " + cmdtuple + " is not on the right form: " + error);
} }
} }
@ -233,6 +232,16 @@ function doShow(type, msg){
// type gives the class of div to use. // type gives the class of div to use.
// The default types are // The default types are
// "out" (normal output) or "err" (red error message) // "out" (normal output) or "err" (red error message)
if (type == "debug") {
if (DEBUG) {
type = "out";
msg = "DEBUG: " + msg;
}
else {
return;
}
}
// output
$("#messagewindow").append( $("#messagewindow").append(
"<div class='msg "+ type +"'>"+ msg +"</div>"); "<div class='msg "+ type +"'>"+ msg +"</div>");
// scroll message window to bottom // scroll message window to bottom