/** * @brief Sends @p what to the receiver specified in @p hdr. */ inline void send_tuple(destination_header hdr, any_tuple what) { if (hdr.receiver == nullptr) return; auto s = self.get(); message_header fhdr{s, std::move(hdr.receiver), hdr.priority}; if (fhdr.receiver != s && s->chaining_enabled()) { if (fhdr.receiver->chained_enqueue(fhdr, std::move(what))) { // only actors implement chained_enqueue to return true s->chained_actor(fhdr.receiver.downcast<actor>()); } } else fhdr.deliver(std::move(what)); }
void local_actor::reply_message(any_tuple&& what) { auto& whom = last_sender(); if (whom == nullptr) { return; } auto id = m_current_node->mid; if (id.valid() == false || id.is_response()) { send_message(whom.get(), std::move(what)); } else if (chaining_enabled()) { if (whom->chained_sync_enqueue(this, id.response_id(), std::move(what))) { m_chained_actor = whom; } } else whom->sync_enqueue(this, id.response_id(), std::move(what)); }