示例#1
0
    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);
    }
示例#2
0
    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);
    }