summaryrefslogtreecommitdiff
path: root/man/8/collabsrv
diff options
context:
space:
mode:
Diffstat (limited to 'man/8/collabsrv')
-rw-r--r--man/8/collabsrv334
1 files changed, 334 insertions, 0 deletions
diff --git a/man/8/collabsrv b/man/8/collabsrv
new file mode 100644
index 00000000..43939187
--- /dev/null
+++ b/man/8/collabsrv
@@ -0,0 +1,334 @@
+.TH COLLABSRV 8
+.SH NAME
+collabsrv \- multi-user collaboration
+.SH SYNOPSIS
+.B collabsrv/collabsrv
+[
+.BI "-f " keyfile
+] [
+.BI "-n " netaddress
+] [
+.I dir
+]
+.PP
+.B collabsrv/servers/chatsrv
+.PP
+.B collabsrv/servers/mpx
+.PP
+.B collabsrv/servers/wbsrv
+.SH DESCRIPTION
+.I Collabsrv
+listens on network address
+.I netaddress
+(default:
+.BR tcp!*!9999 )
+for incoming requests to attach to services
+it offers.
+The services are defined by the contents of directory
+.IR dir
+(default:
+.BR /services/collab ).
+.I Collabsrv
+serves an authenticated Styx connection that exports the contents of
+.IB dir /export
+(default:
+.BR /services/collab/export ).
+The exported name space can contain directories from a shared file server,
+but it will also contain a directory
+.B services
+giving access to any collaborative activity services that have been configured.
+.PP
+The
+.B services
+directory contains a single
+.B ctl
+file and a set of subdirectories, numbered
+.BR 0 ,
+.BR 1
+and so on.
+The
+.B ctl
+is used to activate and access services.
+Each service instance is identified by a name;
+clients connect to a given instance by presenting its name.
+Each directory represents one instance of a service.
+Each service instance corresponds to a name space; the clients
+all share that name space.
+The name space is determined by the service.
+.PP
+A client wishing to make use of the services must first
+.IR sys-dial (2)
+to connect to
+.IR collabsrv,
+and authenticate and mount the resulting Styx connection.
+It can do so using the
+.I mount
+command
+(see
+.IR bind (1)),
+or by
+using
+.IR security-auth (2)
+and
+.B Sys->mount
+(see
+.IR sys-bind (2)).
+Normally, this is done by
+.IR collab (1).
+.PP
+A new connection to a particular service is requested by opening the
+.B ctl
+file for reading and writing,
+writing a service request to it, and reading back
+the number of the directory corresponding to the requested service.
+A service request written to
+.B ctl
+is text of the following form:
+.IP
+.DS
+.I "service id"
+.DE
+.PP
+where
+.I service
+is a string specifying the type of service (eg,
+.BR chat )
+and
+.I id
+is a string identifying the instance.
+The server does not interpret
+.IR id ;
+it is up to the clients to agree a naming convention (often
+using the name of a shared file as an
+.IR id ).
+.I Collabsrv
+will connect to instance
+.I id
+of the requested
+.I service
+type
+if one is already running, or start one if necessary;
+the write request returns an error if the service cannot be started.
+Following a successful write to
+.BR ctl ,
+a read will return the number of the service
+directory containing the client's private connection to that service instance.
+Closing the
+.B ctl
+file disconnects from the service.
+.PP
+Available services are defined by a configuration file
+.BR /services/collab/services.cfg ,
+which contains a sequence of configuration
+entries of the following form:
+.IP
+.EX
+.I service
+.br
+\f5 path=\fIdisfile\fP
+.EE
+.PP
+where
+.I service
+is the name presented in a service request, and
+.I disfile
+names a Dis file implementing that service;
+path names are interpreted relative to
+.BR /services/collab ,
+but usually refer to files in
+.BR /dis/collabsrv/servers .
+.PP
+Each
+.I collabsrv
+service is represented by a name space peculiar to that service.
+The interface to the service is therefore implemented by a service-specific Styx server
+.RI ( disfile
+in the configuration file).
+Current services are described below.
+.SS "Chat"
+.I Chatsrv
+provides a simple service for the exchange of text messages.
+It serves a name space containing two files.
+The files together represent a single messaging group:
+.TF users
+.TP
+.B users
+A read-only file that lists the user names of the current members of the group, one per line.
+The version number of the file's Qid
+(see
+.IR sys-stat (2))
+is incremented each time a client arrives or leaves.
+.TP
+.B msgs
+.RS
+A client connects to the messaging group by opening this file.
+A message is sent to the group by writing to the file.
+Each read returns the next unread message, prefixed by the name of the sender,
+or
+.B <you>
+for a message sent by the current client.
+A client sees no messages sent before it connects.
+Messages are delivered in the same order to all clients; clients receive their own messages.
+Two special messages are generated by the server:
+.IP
+.EX
++++ \fIname\fP has arrived
+--- \fIname\fP has left
+.EE
+.PP
+as clients come and go.
+.RE
+.SS "Multiplexor"
+.I Mpx
+offers a general fan-out/fan-in multiplexing service for a tree of processes,
+with one controlling or root process at the root of the tree,
+and a set of client processes at the leaves of the tree.
+It serves three files:
+.TF users
+.TP
+.B root
+An exclusive-use file read and written by the root process
+to communicate with the leaf processes.
+.TP
+.B leaf
+Client processes read and write this file to communicate with the
+root process (each
+.B open
+of
+.B leaf
+is independent).
+It cannot be opened until a process has opened
+.BR root .
+After
+.B root
+has been closed, and any remaining messages on
+.B leaf
+have been read,
+subsequent reads will return zero bytes (end-of-file).
+.TP
+.B users
+A read-only text file that lists the user names of processes that currently have
+.B leaf
+open.
+There is one line per leaf, containing a unique numeric ID for the leaf, a space, and then the users's name.
+.PP
+A message written to
+.B root
+is replicated on all instances of
+.B leaf
+that are currently open.
+A message written to any instance of
+.B leaf
+will be read by the process reading
+.BR root .
+Data written to both
+.B root
+and
+.B leaf
+has a prefix added to identify the sender, causing messages
+to have the following format:
+.IP
+.EX
+.I "seq clientid op name data"
+.EE
+.PP
+where
+.I seq
+is a unique message sequence number;
+.I clientid
+is a unique number identifying the process amongst currently connected clients,
+with 0 identifying the root process;
+.I op
+is a single character giving the message type (see below);
+.I name
+is the sending process's user name; and
+.I data
+is the data written by the process, which can be text or binary (the message header is always text).
+.I Mpx
+also generates messages as root and leaf processes arrive and leave.
+These are identified by
+.IR op .
+The various
+.I op
+values and the direction in which they can occur are listed below:
+.TP
+.B a
+New leaf process has arrived (leaf to root)
+.TP
+.B M
+Message from root process (root to leaf)
+.TP
+.B m
+Message from leaf process (leaf to root)
+.TP
+.B L
+Root process has left (root to leaf)
+.TP
+.B l
+Leaf process has left (leaf to root)
+.PP
+Messages are only ever sent from the root to all leaves, or from a leaf to the root,
+never from leaf to leaf; the root process could of course rebroadcast a message from a leaf.
+The multiplexor service is used to implement
+a real-time poll
+(see
+.B poll
+and
+.B poller
+in
+.IR collab-clients (1)),
+but could be used for several other services, such as auctions.
+.SS "Whiteboard"
+.I Wbsrv
+offers a service for sharing a simple line drawing.
+It serves two files:
+.TP
+.B wb.bit
+A read-only file containing an uncompressed
+.IR image (6)
+with the current state of the drawing.
+.TP
+.B strokes
+This file is read and written to exchange strokes with other clients.
+A stroke has the following representation:
+.RS
+.IP
+.IR "colour width x0 y0 x1 y1 " ...
+.PP
+where all values are space-separated decimal numbers:
+.I colour
+is an index into the
+.IR rgbv (6)
+colour map;
+.I width
+is the width of the line in pixels, and
+the sequence of coordinate pairs defines the connected line segments to draw.
+A stroke is transmitted from one client to all others by writing a stroke description to the file in a single write.
+Each read returns a description of a stroke made by another client.
+.RE
+.PP
+A whiteboard client should read the
+.B wb.bit
+file to obtain its image, then read the
+.B strokes
+file for instructions to keep it up to date.
+.SH FILES
+.TF /services/collab/export/services
+.TP
+.B /services/collab/export/services
+active service directory
+.TP
+.B /services/collab/services.cfg
+maps service names to modules
+.TP
+.B /dis/collabsrv/servers
+service implementation modules
+.SH SOURCE
+.B /appl/collabsrv
+.br
+.B /appl/collabsrv/servers
+.br
+.B /appl/collabsrv/lib
+.SH SEE ALSO
+.IR collab (1),
+.IR collab-clients (1)