¤ socketServerF, SocketMsg, et al

Client/Server programming

Types

socketServerF :: Port -> (Socket -> Peer -> F a (SocketMsg b)) -> F (Int, a) (Int, ClientMsg b)
data SocketMsg a = SocketMsg a | SocketEOS
  instance Functor SocketMsg
data ClientMsg a = ClientMsg a | ClientEOS | ClientNew

Synopsis

socketServerF port clienthandler

type Port = Int
type Peer = Host

Description

socketServerF creates a socket server, that is, a fudget that creates a passive socket and waits for other programs, clients, to connect to it. When a new client connects, it is assigned a unique number and a handler fudget is started to communicate with it.

Client handlers can communicate both with the (remote) client and with (local) fudgets connected to the server fudget. A client handler can thus be very simple, and just forward messages to other fudgets, or it can be more complex and can handle most (or all) of the communication with the client on its own.

Input

pairs of client numbers and messages to send to a client handler.

Output

pairs of client numbers and messages concerning a client. (n,ClientNew), where n is a new number, is output when a new client connects. (n,ClientMsg x) is output when the handler for client n outputs SocketMsg x. (n,ClientEOS) is output when the client handler outputs SocketEOS. After this, the client handler is terminated.

Arguments

port :: Port
The port number to listen for connections at.

clienthandler :: Socket -> Peer -> F a (SocketMsg b)
A fudget that handles the communication with one client.

See Also

Connecting to a server from a client: openSocketF.

A fudget for creating clients and client handlers handlers: transceiverF.

Type safe socket communication: tSocketServerF et al.

A more detailed description of the ideas can be found in the chapter Typed sockets for client/server applications of the Fudgets Thesis .

The first presentation of the ideas appeared in Implementing Real-time Interactive Multi-User Games with Fudgets (1994).

Bugs

A client handler is expected to output messages of type SocketMsg, but transceiverF outputs messages of type String.

This page documents work progress. Information on this page is subject to change without notice and does not represent a commitment on the part of the Fudgets corporation.