CONCEPT
Intermud 3 Daemon
DESCRIPTION
This daemon gives your mud the ability to connect to the tcp
and router based Intermud 3 network. You will find some
implementation specific notes in this document. The protocol
is described elsewhere (e.g. www.intermud.org). You should be
quite familiar with the protocol layout prior reading this.
The i3d connects via tcp to the router. LPmud does not support
them within the driver - the (x)erq is used for this. Some
implementations communicate directly with the erq wich makes
them hard to maintain. And maybe you would like to have sockets
for other things as well. So this implementation is based on a
socketd implemented in LPC. See sockets(WL) for details.
After loading the i3d it collects all present modules with their
services. The function ServiceQuery() is therefor called in every
object in the I3_TOOLDIR.
The Modules answer with a call to RegisterService() in the i3d:
RegisterService(string general, string type, closure cb, mixed* ass)
'general' is the module's main name. It has to be specified only
on the first call if the module wants to register multiple services.
If the name is prependet with '!' it is not used externally, means
it is not added to the 'supported services' mapping. This is for
modules like the 'error' handler module. The type is the serviced
service-id. Closure should point to a static function which handles
the service request.
'ass' specifies some type and size assertions about the handled
packets. If an incoming packet does not match your expected format it
is simply dropped. Your module does not need to check the types
anymore. The assertion array consists of:
({ ({ "Name Of Field", Type [, Type 2 [, Type 3]] }),
({ "2nd Field Name", Type, .. }), .. })
Note that the mudlist and error module must exist for correct
function of the daemon. If you do not handle the chanlist
packages you also have to change the startup procedure, setting
the i3d to *RUN* after the first mudlist packet (which ist not quite
correct, you should at least have some chanlist dummy handler).
If the router answers our connect with a different router package
we disconnect und reconnect to the new router according to the
specs (this happend only once). We connect based on the DNS Name
of the router, so this should nearly never happen. If it happens
don't forget to change the router's DNS name.
An incoming packet will be type checked according to the packet's
assertions and dispatched to the appropriate module.
... to be continued and to be rewritten ;o)
SEE ALSO
sockets(WL), intermud(C)
|