Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
messagecallbackhandler.h
Go to the documentation of this file.
1
#pragma once
2
//------------------------------------------------------------------------------
24
25
//------------------------------------------------------------------------------
26
#include "messaging/message.h"
27
#include "
util/dictionary.h
"
28
#include "
util/delegate.h
"
29
#include "
core/ptr.h
"
30
namespace
Messaging
31
{
32
class
MessageCallbackHandler
33
{
34
public
:
36
template
<
class
CLASS,
void
(CLASS::*METHOD)(const Ptr<Messaging::Message>&)>
static
void
AddCallback
(
const
Ptr<Messaging::Message>
& msg, CLASS* obj);
38
static
void
AbortCallback
(
const
Ptr<Messaging::Message>
& msg);
40
template
<
class
CLASS>
static
void
AbortCallbacks
(CLASS* obj);
42
static
void
Update
();
43
private
:
44
static
Util::Array<Ptr<Messaging::Message>
>
Messages
;
45
static
Util::Array
<
Util::Delegate
<void(
const
Ptr<Messaging::Message>
&)> >
Callbacks
;
46
};
47
48
//------------------------------------------------------------------------------
51
template
<
class
CLASS>
52
void
53
MessageCallbackHandler::AbortCallbacks
( CLASS* obj )
54
{
55
n_assert
(0 != obj);
56
IndexT
i;
57
for
(i = 0; i <
Callbacks
.Size(); i++)
58
{
59
//const Util::Delegate<const Ptr<Messaging::Message>& >& callback = Callbacks[i];
60
const
Util::Delegate
<void(
const
Ptr<Messaging::Message>
&)>& callback =
Callbacks
[i];
61
if
(callback.GetObject<CLASS>() == obj)
62
{
63
Callbacks
.EraseIndex(i);
64
Messages
.EraseIndex(i);
65
i--;
66
}
67
}
68
}
69
70
//------------------------------------------------------------------------------
73
template
<
class
CLASS,
void
(CLASS::*METHOD)(const Ptr<Messaging::Message>&)>
74
void
75
MessageCallbackHandler::AddCallback
(
const
Ptr<Messaging::Message>
& msg, CLASS* obj)
76
{
77
Util::Delegate
<void(
const
Ptr<Messaging::Message>
&)> del =
Util::Delegate
<void(
const
Ptr<Messaging::Message>
&)>::FromMethod<CLASS,METHOD>(obj);
78
Messages
.Append(msg);
79
Callbacks
.Append(del);
80
}
81
82
//------------------------------------------------------------------------------
86
#define __SingleFireCallback(CLASS, METHOD, OBJ, MSG) Messaging::MessageCallbackHandler::AddCallback<CLASS, &CLASS::METHOD>(MSG, OBJ);
87
#define __AbortSingleFireCallback(MSG) Messaging::MessageCallbackHandler::AbortCallback(MSG);
88
#define __AbortSingleFireCallbacks(CLASS, OBJ) Messaging::MessageCallbackHandler::AbortCallbacks<CLASS>(OBJ);
89
}
// namespace Messaging
90
//------------------------------------------------------------------------------
Messaging::MessageCallbackHandler
Handles asynchronous message callbacks.
Definition
messagecallbackhandler.h:33
Messaging::MessageCallbackHandler::AbortCallbacks
static void AbortCallbacks(CLASS *obj)
remove all message callbacks related to a class
Definition
messagecallbackhandler.h:53
Messaging::MessageCallbackHandler::AbortCallback
static void AbortCallback(const Ptr< Messaging::Message > &msg)
remove a single message callback
Definition
messagecallbackhandler.cc:47
Messaging::MessageCallbackHandler::Messages
static Util::Array< Ptr< Messaging::Message > > Messages
Definition
messagecallbackhandler.h:44
Messaging::MessageCallbackHandler::Callbacks
static Util::Array< Util::Delegate< void(const Ptr< Messaging::Message > &)> > Callbacks
Definition
messagecallbackhandler.h:45
Messaging::MessageCallbackHandler::Update
static void Update()
update messages
Definition
messagecallbackhandler.cc:18
Messaging::MessageCallbackHandler::AddCallback
static void AddCallback(const Ptr< Messaging::Message > &msg, CLASS *obj)
setup a message callback
Definition
messagecallbackhandler.h:75
Ptr
Nebula's smart pointer class which manages the life time of RefCounted objects.
Definition
ptr.h:38
Util::Array
Nebula's dynamic array class.
Definition
array.h:61
Util::Delegate
Nebula delegate class, allows to store a function, method or lambda call into a C++ object for later ...
Definition
delegate.h:39
n_assert
#define n_assert(exp)
Definition
debug.h:50
delegate.h
dictionary.h
Messaging
Definition
asyncport.cc:10
ptr.h
IndexT
int IndexT
Definition
types.h:41
code
foundation
messaging
messagecallbackhandler.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.