Commit f582e63c authored by Dominik Charousset's avatar Dominik Charousset

added delayed_send_tuple and delayed_reply_tuple

parent f30013ae
...@@ -68,8 +68,10 @@ class abstract_scheduled_actor : public abstract_actor<scheduled_actor> { ...@@ -68,8 +68,10 @@ class abstract_scheduled_actor : public abstract_actor<scheduled_actor> {
++m_active_timeout_id)); ++m_active_timeout_id));
} }
else { else {
get_scheduler()->delayed_send(this, d, atom("TIMEOUT"), get_scheduler()->delayed_send(
++m_active_timeout_id); this, d,
make_any_tuple(
atom("TIMEOUT"), ++m_active_timeout_id));
} }
m_has_pending_timeout_request = true; m_has_pending_timeout_request = true;
} }
......
...@@ -116,13 +116,11 @@ class scheduler { ...@@ -116,13 +116,11 @@ class scheduler {
template<typename Duration, typename... Data> template<typename Duration, typename... Data>
void delayed_send(const channel_ptr& to, void delayed_send(const channel_ptr& to,
const Duration& rel_time, const Duration& rel_time,
Data&&... data ) { any_tuple data ) {
static_assert(sizeof...(Data) > 0, "no message to send");
auto sub = make_any_tuple(std::forward<Data>(data)...);
auto tup = make_any_tuple(atom("SEND"), auto tup = make_any_tuple(atom("SEND"),
util::duration{rel_time}, util::duration{rel_time},
to, to,
std::move(sub)); std::move(data));
delayed_send_helper()->enqueue(self, std::move(tup)); delayed_send_helper()->enqueue(self, std::move(tup));
} }
...@@ -130,20 +128,18 @@ class scheduler { ...@@ -130,20 +128,18 @@ class scheduler {
void delayed_reply(const actor_ptr& to, void delayed_reply(const actor_ptr& to,
const Duration& rel_time, const Duration& rel_time,
message_id_t id, message_id_t id,
Data&&... data ) { any_tuple data ) {
static_assert(sizeof...(Data) > 0, "no message to send");
CPPA_REQUIRE(!id.valid() || id.is_response()); CPPA_REQUIRE(!id.valid() || id.is_response());
if (id.valid()) { if (id.valid()) {
auto sub = make_any_tuple(std::forward<Data>(data)...);
auto tup = make_any_tuple(atom("REPLY"), auto tup = make_any_tuple(atom("REPLY"),
util::duration{rel_time}, util::duration{rel_time},
to, to,
id, id,
std::move(sub)); std::move(data));
delayed_send_helper()->enqueue(self, std::move(tup)); delayed_send_helper()->enqueue(self, std::move(tup));
} }
else { else {
delayed_send(to, rel_time, id, std::forward<Data>(data)...); this->delayed_send(to, rel_time, std::move(data));
} }
} }
......
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