void deliver(response_promise& rp, message& x) {
   CAF_LOG_DEBUG("respond via response_promise");
   // suppress empty messages for asynchronous messages
   if (x.empty() && rp.async())
     return;
   rp.deliver(std::move(x));
 }
void stream_manager::deliver_handshake(response_promise& rp, stream_slot slot,
                                       message handshake) {
  CAF_LOG_TRACE(CAF_ARG(rp) << CAF_ARG(slot) << CAF_ARG(handshake));
  CAF_ASSERT(rp.pending());
  CAF_ASSERT(slot != invalid_stream_slot);
  ++pending_handshakes_;
  auto next = rp.next();
  rp.deliver(open_stream_msg{slot, std::move(handshake), self_->ctrl(), next,
                             priority_});
}
Exemple #3
0
 void handle_results() {
   auto& map_fun = actor_facade_->map_results_;
   auto msg = map_fun ? apply_args(map_fun,
                                   detail::get_indices(result_buffers_),
                                   result_buffers_)
                      : message_from_results{}(result_buffers_);
   handle_.deliver(std::move(msg));
 }
stream_slot
stream_manager::add_unchecked_outbound_path_impl(response_promise& rp,
                                                 message handshake) {
  CAF_LOG_TRACE(CAF_ARG(rp) << CAF_ARG(handshake));
  CAF_ASSERT(out().terminal() == false);
  if (!rp.pending()) {
    CAF_LOG_WARNING("add_outbound_path called with next == nullptr");
    rp.deliver(sec::no_downstream_stages_defined);
    return invalid_stream_slot;
  }
  auto slot = self_->assign_next_pending_slot_to(this);
  auto path = out().add_path(slot, rp.next());
  CAF_IGNORE_UNUSED(path);
  CAF_ASSERT(path != nullptr);
  // Build pipeline by forwarding handshake along the path.
  deliver_handshake(rp, slot, std::move(handshake));
  generate_messages();
  return slot;
}
 void deliver(response_promise& rp, error& x) {
   CAF_LOG_DEBUG("report error back to requesting actor");
   rp.deliver(std::move(x));
 }
Exemple #6
0
 void handle_results () {
     m_handle.deliver(m_actor_facade->m_map_result(m_result));
 }