Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
message.h
Go to the documentation of this file.
1
#pragma once
2
//------------------------------------------------------------------------------
17
#include "
core/refcounted.h
"
18
#include "
io/binaryreader.h
"
19
#include "
io/binarywriter.h
"
20
#include "
messaging/id.h
"
21
#include "
threading/interlocked.h
"
22
23
//------------------------------------------------------------------------------
27
#define __DeclareMsgId \
28
public:\
29
static Messaging::Id Id; \
30
virtual const Messaging::Id& GetId() const;\
31
private:
32
33
#define __ImplementMsgId(type) \
34
Messaging::Id type::Id; \
35
const Messaging::Id& type::GetId() const { return type::Id; }
36
37
//------------------------------------------------------------------------------
38
namespace
Messaging
39
{
40
class
MessageReader;
41
class
MessageWriter;
42
class
Port;
43
44
class
Message
:
public
Core::RefCounted
45
{
46
__DeclareClass
(
Message
);
47
__DeclareMsgId
;
48
public
:
50
Message
();
52
bool
CheckId
(
const
Messaging::Id
&
id
)
const
;
54
virtual
void
Encode
(
const
Ptr<IO::BinaryWriter>
& writer);
56
virtual
void
Decode
(
const
Ptr<IO::BinaryReader>
& reader);
58
void
SetHandled
(
bool
b);
60
bool
Handled
()
const
;
62
void
SetDeferred
(
bool
b);
64
bool
IsDeferred
()
const
;
66
void
SetDeferredHandled
(
bool
b);
68
bool
DeferredHandled
()
const
;
70
bool
GetDistribute
()
const
;
72
void
SetDistribute
(
bool
b);
73
protected
:
74
volatile
int
handled
;
75
bool
deferred
;
76
bool
deferredHandled
;
77
bool
distribute
;
78
};
79
80
//------------------------------------------------------------------------------
83
inline
bool
84
Message::CheckId
(
const
Messaging::Id
&
id
)
const
85
{
86
return
(
id
== this->GetId());
87
}
88
89
//------------------------------------------------------------------------------
92
inline
void
93
Message::SetHandled
(
bool
b)
94
{
95
Threading::Interlocked::Exchange
(&this->
handled
, (
int
)b);
96
}
97
98
//------------------------------------------------------------------------------
101
inline
bool
102
Message::Handled
()
const
103
{
104
return
0 != this->
handled
;
105
}
106
107
//------------------------------------------------------------------------------
110
inline
void
111
Message::SetDeferred
(
bool
b)
112
{
113
this->
deferred
= b;
114
}
115
116
//------------------------------------------------------------------------------
119
inline
bool
120
Message::IsDeferred
()
const
121
{
122
return
this->
deferred
;
123
}
124
125
//------------------------------------------------------------------------------
128
inline
void
129
Message::SetDeferredHandled
(
bool
b)
130
{
131
this->
deferredHandled
= b;
132
}
133
134
//------------------------------------------------------------------------------
137
inline
bool
138
Message::DeferredHandled
()
const
139
{
140
return
this->
deferredHandled
;
141
}
142
143
//------------------------------------------------------------------------------
146
inline
bool
147
Message::GetDistribute
()
const
148
{
149
return
distribute
;
150
}
151
152
//------------------------------------------------------------------------------
155
inline
void
156
Message::SetDistribute
(
bool
b)
157
{
158
this->
distribute
= b;
159
}
160
161
}
// namespace Messaging
162
//------------------------------------------------------------------------------
binaryreader.h
binarywriter.h
Core::RefCounted
The common base class of Nebula.
Definition
refcounted.h:38
Messaging::Id
A message identifier.
Definition
id.h:19
Messaging::Message::Encode
virtual void Encode(const Ptr< IO::BinaryWriter > &writer)
encode message into a stream
Definition
message.cc:30
Messaging::Message::SetDistribute
void SetDistribute(bool b)
enable distribution over network
Definition
message.h:156
Messaging::Message::deferred
bool deferred
Definition
message.h:75
Messaging::Message::__DeclareClass
__DeclareClass(Message)
Messaging::Message::SetDeferred
void SetDeferred(bool b)
set deferred flag
Definition
message.h:111
Messaging::Message::deferredHandled
bool deferredHandled
Definition
message.h:76
Messaging::Message::SetHandled
void SetHandled(bool b)
set the handled flag
Definition
message.h:93
Messaging::Message::DeferredHandled
bool DeferredHandled() const
get the deferred handled flag
Definition
message.h:138
Messaging::Message::CheckId
bool CheckId(const Messaging::Id &id) const
return true if message is of the given id
Definition
message.h:84
Messaging::Message::Decode
virtual void Decode(const Ptr< IO::BinaryReader > &reader)
decode message from a stream
Definition
message.cc:39
Messaging::Message::handled
volatile int handled
Definition
message.h:74
Messaging::Message::GetDistribute
bool GetDistribute() const
should this message be distributed over the network
Definition
message.h:147
Messaging::Message::Message
Message()
constructor
Definition
message.cc:17
Messaging::Message::__DeclareMsgId
__DeclareMsgId
Definition
message.h:47
Messaging::Message::distribute
bool distribute
Definition
message.h:77
Messaging::Message::Handled
bool Handled() const
return true if the message has been handled
Definition
message.h:102
Messaging::Message::SetDeferredHandled
void SetDeferredHandled(bool b)
set the deferred handled flag
Definition
message.h:129
Messaging::Message::IsDeferred
bool IsDeferred() const
get deferred flag
Definition
message.h:120
Ptr
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition
ptr.h:38
interlocked.h
id.h
Messaging
Definition
asyncport.cc:10
Threading::Interlocked::Exchange
int Exchange(int volatile *dest, int value)
interlocked exchange
Definition
gccinterlocked.cc:94
refcounted.h
code
foundation
messaging
message.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.