<> <> DIRECTORY IO, IOClasses, Process, Protocols, Rope; EchoProtocol: CEDAR PROGRAM IMPORTS IOClasses, Process, Protocols = {OPEN Protocols; echo: Protocol _ NEW [ProtocolRep _ [ name: "Echo", Connect: Connect, Disconnect: Disconnect ]]; Connect: PROC [ serverName: ROPE, fromClient, toClient: IO.STREAM, noteDisconnect: PROC [clientData: REF ANY] _ NIL, clientData: REF ANY _ NIL, login: BOOL _ FALSE] RETURNS [c: Conversation] = { c _ NEW [ConversationRep _ [protocol: echo, noteDisconnect: noteDisconnect, clientData: clientData, data: NIL]]; TRUSTED {Process.Detach[FORK IOClasses.Copy[from: fromClient, to: toClient]]}; }; Disconnect: PROC [c: Conversation] = { IF c.noteDisconnect # NIL THEN c.noteDisconnect[c.clientData]}; Protocols.RegProtocol[echo]; }.