std::mutex rsm_client_mutex;
void primary_failure(lock & rsm_client_mutex_lock);
bool init_members(lock & rsm_client_mutex_lock);
- rsm_protocol::status invoke(unsigned int proc, string & rep, const string & req);
- template<class R> int call_m(unsigned int proc, R & r, const marshall & req);
+ rsm_protocol::status invoke(rpc_protocol::proc_id_t proc, string & rep, const string & req);
+ template<class R> int call_marshalled(rpc_protocol::proc_t & proc, R & r, const marshall & req);
public:
rsm_client(string dst);
template<class P, class R, class ...Args>
- inline int call(rpc_protocol::proc_t<P> proc, R & r, const Args & ...a1) {
+ inline int call(rpc_protocol::proc_checked_t<P> proc, R & r, const Args & ...a1) {
static_assert(is_valid_call<P, R, Args...>::value, "RSM method invoked with incorrect argument types");
- return call_m(proc.id, r, marshall(a1...));
+ return call_marshalled(proc, r, marshall(a1...));
}
};
}
template<class R>
-int rsm_client::call_m(unsigned int proc, R & r, const marshall & req) {
+int rsm_client::call_marshalled(rpc_protocol::proc_t & proc, R & r, const marshall & req) {
string rep;
- int intret = invoke(proc, rep, req.content());
+ int intret = invoke(proc.id, rep, req.content());
VERIFY( intret == rsm_client_protocol::OK );
unmarshall u(rep, false, intret);
if (intret < 0) return intret;
LOG << "failed to unmarshall the reply.";
LOG << "You probably forgot to set the reply string in "
<< "rsm::client_invoke, or you may have called RPC "
- << "0x" << std::hex << proc << " with the wrong return type";
+ << proc.name << " (0x" << std::hex << proc.id << ") with the wrong return type";
LOG << "here's what I got: \"" << hexify(rep) << "\"";
VERIFY(0);
return rpc_protocol::unmarshall_reply_failure;
}
if(!unmarshall(res, false, r).okdone()) {
LOG << "failed to unmarshall the reply.";
- LOG << "You are probably calling RPC 0x" << std::hex << proc
- << " with the wrong return type.";
+ LOG << "You are probably calling RPC " << proc.name << " (0x"
+ << std::hex << proc.id << ") with the wrong return type.";
LOG << "here's what I got: \"" << hexify(res) << "\"";
VERIFY(0);
return rpc_protocol::unmarshall_reply_failure;