Communication Coordination System Documentation
- Status: At least partially coded, not publically available.
Description
The Communication Coordination system is intended to ease communication between multiple objects. It provides basic channel communication, allowing an object to join and leave channels, communicate on one or more channels, retrieve a list of channels and retreive a list of all objects on a given channel. The channels are controlled by a central server. This server tracks which objects are on which channels and handles sending communications out to all channel members. The server also has the ability to lock channels, providing basic security.
Client communication
The client communicates with the server through the
@process
attribute.
@process
is triggered and passed several variables using the following syntax:
@tr server/process=ID,Cmd,Paramlist
.
-
ID
is the dbref of the object that is doing the triggereing, the system will send any return messages back to that ID
-
Cmd
can be one of the commands listed in the commands table
-
Paramlist
contains the parameters for the command, the format varies with each command. The table below outlines the commands and their parameters:
Commands table
Command |
Parameters |
Description |
list |
|
Requests a list of currently active channels |
who |
channel |
Requests a list of objects on channel |
send |
channel=text |
Send text to all participants of channel |
join |
channel |
Join channel |
leave |
channel |
Leave channel |
Server responses
Each command will cause the server to send a response. Responses are sent in the same manner that commands are,
@tr client/process=ID,Rsp,Datalist
.
-
ID
is the dbref of the responding server, this allows a single object to distinguish between replies from multiple servers
-
Rsp
is the response
-
Datalist
is a comma seperated list of the data that corresponds to the command. Responses share the same syntax (and usually the same name) as commands. The table below contains the responses and the data they return:
Response table
Response |
Datalist |
Description |
list |
chanlist |
Returns chanlist, a space-seperated list of currently active channels |
who |
channel,wholist |
Returns wholist, a space-seperated list of dbrefs, one for each object on channel |
rcv |
id,channel,text |
id has sent text to channel |
join |
id,channel |
id has joined channel |
leave |
id,channel |
id has left channel |
Configuring and using a client
Clients have very little configuration:
-
@debug
- A value that evaluates to true will cause the client to @echo the parameters of each @process
trigger.
Clients the following attributes which are triggered when the server sends a response:
Response |
Attribute |
Parameters |
Description |
list |
@proc_list |
server,channel list |
Server response to list request |
list |
@proc_who |
server,channel,who list |
Server response to who request |
list |
@proc_rcv |
server,channel,sender,message |
Channel message |
list |
@proc_join |
server,channel,dbref |
Object channel join notification |
list |
@proc_leave |
server,channel,dbref |
Object channel leave notification |
list |
@proc_denied |
server,command |
Server response when denying command/request |
list |
@proc_error |
server,command |
Server was unable to process command |
list |
@proc_bad |
?,?,?,?,? |
Client was unable to process command/reply, raw @tr parameters available in v(0)-v(5) |
By default each of these attributes @echos the information provided to it as an example on how to use it.
Configuring and using a server
Servers provide the following configuration options:
-
@debug
- A value that evaluates to true will cause the server to @echo the parameters of each @process
trigger.
-
@chanlocks
- A list of channel locks, used to prevent unauthorized clients from joining or listing the members of a channel
@chanlock
The
@chanlock
attribute holds a list of locked channels and the attributes that contain the functions for the channel lock. Entries are seperated by spaces and each entry consists of the channel name and attribute name seperated by a tilde (
~
). When an attribute is parsed for the lock, v(#) is set to the client the lock is being tested for.
Sample decompile showing attributes related to @chanlock
@defattr Server/none
@defattr Server/foolock
@defattr Server/bazlock
@set Server=chanlocks:bar~none foo~foolock baz~bazlock
@set Server=none:0
@set Server=foolock:#2484
@set Server=bazlock:[match(name(v(#)),QBFreak)]
In this example, no one is allowed on channel
bar, only
#2484
is allowed on
foo and only objects named
QBFreak
are allowed on
baz.
--
SluggyQBFreak - 12 Dec 2005