示例#1
0
文件: send.hpp 项目: Fresh1/libcppa
/**
 * @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));
}
示例#2
0
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));
}