/* * 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 () { }