blob: 54cd7713f0e05d357984767af2e4f955d168b96d (
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
86
87
88
89
90
91
92
93
94
95
96
97
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 ()
{
}
|