void sim_server_session::send(uint64_t sig) { for (auto& msg : _sending_msgs) { message_ex* recv_msg = virtual_send_message(msg); { node_scoper ns(_client->net().node()); _client->on_recv_reply(recv_msg->header->id, recv_msg, recv_msg->to_address == recv_msg->from_address ? 0 : (static_cast<sim_network_provider*>(&_net))->net_delay_milliseconds() ); } } on_send_completed(sig); }
void sim_client_session::send(uint64_t sig) { for (auto& msg : _sending_msgs) { sim_network_provider* rnet = nullptr; if (!s_switch[task_spec::get(msg->local_rpc_code)->rpc_call_channel][msg->hdr_format].get(remote_address(), rnet)) { derror("cannot find destination node %s in simulator", remote_address().to_string() ); //on_disconnected(); // disable this to avoid endless resending } else { auto server_session = rnet->get_server_session(_net.address()); if (nullptr == server_session) { rpc_session_ptr cptr = this; message_parser_ptr parser(_net.new_message_parser(msg->hdr_format)); server_session = new sim_server_session(*rnet, _net.address(), cptr, parser); rnet->on_server_session_accepted(server_session); } message_ex* recv_msg = virtual_send_message(msg); { node_scoper ns(rnet->node()); bool ret = server_session->on_recv_message(recv_msg, recv_msg->to_address == recv_msg->header->from_address ? 0 : rnet->net_delay_milliseconds() ); dassert(ret, ""); } } } on_send_completed(sig); }