ref: d540dcf6834b4bec8a2d21f2fe95eccf49f97b03
dir: /appl/spree/engines/chat.b/
implement Engine;
include "sys.m";
sys: Sys;
include "draw.m";
include "../spree.m";
spree: Spree;
Attributes, Range, Object, Clique, Member: import spree;
clique: ref Clique;
clienttype(): string
{
return "chat";
}
init(g: ref Clique, srvmod: Spree): string
{
sys = load Sys Sys->PATH;
clique = g;
spree = srvmod;
return nil;
}
join(nil: ref Member): string
{
return nil;
}
leave(nil: ref Member)
{
}
Eusage: con "bad command usage";
command(member: ref Member, cmd: string): string
{
e := ref Sys->Exception;
if (sys->rescue("parse:*", e) == Sys->EXCEPTION) {
sys->rescued(Sys->ONCE, nil);
return e.name[6:];
}
(n, toks) := sys->tokenize(cmd, " \n");
assert(n > 0, "unknown command");
case hd toks {
"say" =>
# say something
assert(n == 2, Eusage);
clique.action("say " + string member.id + " " + hd tl toks, nil, nil, ~0);
* =>
assert(0, "bad command");
}
return nil;
}
assert(b: int, err: string)
{
if (b == 0)
sys->raise("parse:" + err);
}