Esempio n. 1
0
void local_actor_channel::ask_impl(std::unique_ptr<message> msg,
                                   const ResponseFun& response_fun) {
    auto target_system = actor_system_storage::instance().get_system(msg->get_target().system_name);
    if (target_system != nullptr) {
        auto response_promise_actor = typed_props<promise_actor, typed_promise_actor>(response_fun);
        actor_ref p_actor = target_system->actor_of(response_promise_actor,
                                                    target_system->get_next_temporary_actor_name());

        msg->set_sender(p_actor);

        actor_ptr_.lock()->tell(std::move(msg));
    }

}
Esempio n. 2
0
void remote_actor_channel::ask_impl(std::unique_ptr<message> msg, const ResponseFun& response_fun) {
    auto target_system = get_actor_system(msg->get_sender());
    if (!target_system) {
        throw new server_doesnt_exist("can't send messages to remote actors without an active actor system");
    }

    auto response_promise_actor = typed_props<promise_actor, typed_promise_actor>(response_fun);
    actor_ref p_actor = target_system->actor_of(response_promise_actor,
                                                target_system->get_next_temporary_actor_name());

    msg->set_sender(p_actor);

    packet msg_packet(std::move(msg));
    std::string serialized_packet = msg_packet.get_serialized();

    target_system->send_data(serialized_packet, network_actor_endpoint_);
}