From ba066c34dde204aa192d03a23a81356374d93731 Mon Sep 17 00:00:00 2001 From: chatty Date: Wed, 7 Apr 1993 11:50:31 +0000 Subject: Initial revision --- comm/Message.cc | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 comm/Message.cc (limited to 'comm/Message.cc') diff --git a/comm/Message.cc b/comm/Message.cc new file mode 100644 index 0000000..54cd771 --- /dev/null +++ b/comm/Message.cc @@ -0,0 +1,98 @@ +/* + * The Unix Channel + * + * by Michel Beaudouin-Lafon + * + * Copyright 1990-1993 + * Laboratoire de Recherche en Informatique (LRI) + * + * Messages + * + * $Id$ + * $CurLog$ + */ + +#include "cplus_bugs.h" + +#include "Message.h" + +/*?class UchMessage +\typ{UchMessage} is the virtual base class for messages. +Each subclass must redefine the virtual functions \fun{WriteTo} and \fun{ReadFrom}. +Messages can be added to buffers and can be retrieved from buffers. +?*/ + +/*?nodoc?*/ +UchMessage :: UchMessage () +{ + // nothing +} + +/*?nodoc?*/ +UchMessage :: ~UchMessage () +{ +} + +/*? +This virtual function must write a message into a buffer. +Usually, the implementation of this function in a derived class starts by calling +the same function of its base class, because a derived class inherits the fields +of its base class and adds its own fields. +Data is usually appended to the buffer by the \fun{UchMsgBuffer::Append} functions or operator <<. +In class \typ{UchMessage}, this function does nothing. +?*/ +void +UchMessage :: WriteTo (UchMsgBuffer&) +{ + // nothing +} + +/*? +This virtual function must extract data from the buffer to create the message. +At most \var{len} bytes should be read from the buffer. +Usually, the implementation of this function in a derived class starts by calling +the same function of its base class, because a derived class inherits the fields +of its base class and adds its own fields. +Data is usually retrieved from the buffer by the \fun{UchMsgBuffer::Get} functions or operator >>. +In class \typ{UchMessage}, this function does nothing. +?*/ +void +UchMessage :: ReadFrom (UchMsgBuffer&, lword) +{ +} + +/*? +This virtual function can be redefined in derived classes to support the handling of messages +after they have been loaded from a buffer. The function \typ{MyClient}::\fun{NewMessage} +may then look like: +\begin{ccode} +void +MyClient :: NewMessage (UchMsgBuffer& buffer, bool ask) +{ + MyRequest* m = 0; + lword type; + buffer.MsgPeek (&type); + switch (type) { + case MyFirstReqType: + m = new MyFirstRequest; + break; + case ... + ... + } + if (m) { + buffer.Get (m); + m->Activate (); + return TRUE; + } + return FALSE; +} +\end{ccode} +However, this virtual function is only provided as a facility and is not used +by \uch. Redefining it is not mandatory. +?*/ +void +UchMessage :: Activate () +{ +} + + -- cgit v1.1