summaryrefslogtreecommitdiff
path: root/comm/Message.cc
blob: fea0d803a0658c41820769c38a1f5dc30cbeecbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
 *	The Unix Channel
 *
 *	by Michel Beaudouin-Lafon
 *
 *	Copyright 1990-1995
 *	Laboratoire de Recherche en Informatique (LRI)
 *
 *	Messages
 *
 *	$Id$
 *	$CurLog$
 */

#include "cplus_bugs.h"

#include "Message.h"
#include "MsgStream.h"
#include "IOS.h"

/*?class UchMessage
\typ{UchMessage} is the abstract base class for messages.
Each subclass must redefine the virtual functions \fun{WriteTo} and \fun{ReadFrom},
so that messages can be added to and retrieved from buffers.
?*/

/*?nodoc?*/
UchMessage :: UchMessage ()
{
}

/*?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 \fun{operator $<<$}.
The default implementation does nothing.
?*/
void
UchMessage :: WriteTo (UchIOS&)
{
}

/*?
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 \fun{operator $>>$}.
The default implementation does nothing.
?*/
void
UchMessage :: ReadFrom (UchIOS&, lword)
{
}

/*?
This virtual function must be redefined in derived classes to support the handling of messages
after they have been loaded from a buffer. 
\var{ask} is true if the message was sent with \fun{Ask}.
In this case an answer must be sent back with \fun{Reply}.
Messages can be sent before replying; they will be buffered by the receiver for later processing.
But you cannot use \fun{Ask} before replying.
In the class \typ{UchMessage} this function does nothing and returns true;
if \var{ask} is true, it replies immediately with an empty message.
?*/
bool
UchMessage :: Activate (UchMsgStream& s, bool ask)
{
	if (ask) {
		UchMessage dummy;
		s.Reply (dummy);
	}
	return true;
}