Warning: session_start(): open(/var/lib/php/sessions/sess_evomc78ev0km1qsi6t7kak9err, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
set flag DynModule. // central transpileRaw
sclass RemoteControlled > DynPrintLog {
S controllingComputers;
bool enabled;
transient Q q;
visualize {
ret centerAndSouthWithMargins(super.visualize(),
vstackWithSpacing(jrightalignedline(dm_fieldCheckBox('enabled)),
withLabel("Computers that can control me:", dm_fieldTextField('controllingComputers))));
}
start {
dm_privateChat();
q = dm_startQ();
ownResource(vmBus_onMessage('gotFromChat, voidfunc(fS msg) { q.add(r { processMsg(null, msg) }) }));
ownResource(vmBus_onMessage('gotFromPrivateChat, voidfunc(fS sender, fS msg) { q.add(r { processMsg(sender, msg) }) }));
print("Remote Control " + (enabled ? "ENABLED" : "DISABLED") + ". Controlling computers: " + or2(controllingComputers, "-"));
}
void processMsg(S sender, S msg) {
LS computers = words2(controllingComputers);
S author = getAuthorOfSignedText(msg);
//print("Author: " + author + ", controlling computers: " + computers);
bool allowed = computers.contains(author));
msg = trim(unsign(msg));
new Matches m;
if (jMatchStart(" eval :", msg, m)) {
if (neqOneOf($1, "all", computerID())) ret with print("Not for me.");
else if (!enabled) print("Will not eval (module disabled).");
else {
print(trim(indentx("EVAL from " + author + ": " + m.rest())));
O result;
try {
if (!allowed) fail("not allowed");
result = realEval ? dm_javaEval(m.rest()) : dm_javaEvalOrInterpret(m.rest());
} catch print e {
result = e;
}
S mode = "direct";
S out;
if (result != null) {
int l = l_opt(result);
print(">> " + (l != 0 ? "[l=" + l + "] " : "") + result);
}
if (result instanceof byte[]) {
mode = "base64";
out = base64((byte[]) result);
} else {
out = str(result);
if (containsNewLine(out)) {
out = quote(out);
mode = "quoted";
}
}
S line = "done " + $2 + " " + mode + ": " + out;
if (sender == null)
dm_osChat_postSigned(line);
else
dm_privateChat_sendSigned(sender, line);
}
ret;
}
if (!allowed) ret;
// old-style formats follow
//print("Got signed message from " + author + ": " + msg);
if (jMatchStart(" eval fresh:", msg, m)) {
dm_refreshTranspilerAndLoadedFunctions();
msg = $1 + " eval: " + m.rest();
}
bool realEval = jMatchStart(" eval real", msg, m);
if (realEval)
msg = $1 + " eval " + m.rest();
if (jMatchStart(" eval fresh :", msg, m)) {
dm_refreshTranspiler();
msg = $1 + " eval " + $2 + ": " + m.rest();
}
if (jMatchStart(" eval:", msg, m)) {
if (neqOneOf($1, "all", computerID())) print("Not for me.");
else if (!enabled) print("Will not eval (module disabled).");
else {
print(trim(indentx("EVAL: " + m.rest())));
O result = dm_javaEvalOrInterpret(m.rest());
print(">> " + result);
}
}
}
// API
bool addControllingComputer(S computerID) {
if (contains(controllingComputers, computerID)) false;
setField(controllingComputers := trim(controllingComputers + " " + computerID));
true;
}
}