Commit 07ef8117 authored by neverlord's avatar neverlord

implemented forward_to

parent 88dbe4a0
......@@ -506,6 +506,10 @@ inline void reply(Args&&... what) {
self->reply_message(make_any_tuple(std::forward<Args>(what)...));
}
inline void forward_to(const actor_ptr& whom) {
self->forward_message(whom);
}
/**
* @brief Sends a message to @p whom that is delayed by @p rel_time.
* @param whom Receiver of the message.
......
......@@ -388,6 +388,8 @@ class local_actor : public actor {
void reply_message(any_tuple&& what);
void forward_message(const actor_ptr& new_receiver);
inline actor_ptr& chained_actor() {
return m_chained_actor;
}
......
......@@ -119,4 +119,20 @@ void local_actor::reply_message(any_tuple&& what) {
else whom->sync_enqueue(this, id.response_id(), std::move(what));
}
void local_actor::forward_message(const actor_ptr& new_receiver) {
if (new_receiver == nullptr) {
return;
}
auto& from = last_sender();
auto id = m_current_node->mid;
if (id.valid() == false || id.is_response()) {
new_receiver->enqueue(from.get(), m_current_node->msg);
}
else {
new_receiver->sync_enqueue(from.get(), id, m_current_node->msg);
// treat this message as asynchronous message from now on
m_current_node->mid = message_id_t();
}
}
} // namespace cppa
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment