SPREE-GATHER(2)SPREE-GATHER(2)NAME
Gatherengine - module interface for pre-assembled groups.
SYNOPSIS
implement Gatherengine;
include "spree.m";
include "spree/gather.m";
Clique, Member: import Spree;
init: fn(m: Spree, c: ref Clique, argv: list of string, archived: int): string;
clienttype: fn(): string;
maxmembers: fn(): int;
propose: fn(members: array of string): string;
start: fn(members: array of ref Member, archived: int);
command: fn(member: ref Member, c: string): string;
archive: fn();
readfile: fn(f: int, offset: big, n: int): array of byte;
DESCRIPTION
When implementing a spree(2) engine, it is common to have the require‐
ment that a certain number of members are grouped together before actu‐
ally starting the engine. Spree provides no support for this directly;
instead the gather module acts as an intermediate layer: engines that
wish this functionality should implement the Gatherengine interface.
The gather module also provides facilities for the automatic suspension
and resumption of players, clique archival, and members that watch but
do not participate.
Init is called first, with m, the spree module, and c, the new clique.
Argv gives a list of arguments to the engine (the first being the name
of the engine itself); archived is non-zero if the engine has been
restored from an archive. If init returns a non-nil string, it is
taken to describe an error, and the engine will be discarded. Maxmem‐
bers should return the maximum number of members that the engine can
accept; clienttype should return the kind of client that is expected by
the engine (e.g. cards for a card game engine).
Propose proposes that a clique consisting of members (the names of the
proposed members) be started. It returns an error string: if this is
non-nil, then the clique is not started, otherwise the proposed members
are accepted into the clique, and start is called, where members is the
array of actual members (corresponding to the members passed to pro‐
pose), and archived is non-zero if the clique is being restored from an
archive (same as passed to init).
Once a clique has been successfully started, command is called when a
member sends a command to the engine; member has sent the command, and
c is the command itself. Command should return a non-nil error string
if the command fails.
When a clique is being archived, archive will be called to request the
engine to store all its internal state into the object hierarchy (this
is the moment, for instance, to call cardlib->archive).
SEE ALSOspree(2),
SPREE-GATHER(2)