The client part is almost equal to the single threaded version. The only thing you have to do is to provide an additional parameter which contains a method that handles the response. This can be a normal function or a member of an object:
TcpIpConnection conn (false, host, port);
HttpProtocol prot(&conn);
Requester client(&prot);
MethodCall testcall ("testcall");
client.call(testcall, "/RPC2", make_receiver(receiver_func));
The call() method sends the call and then
creates a thread to start this method which is expected to handle the
return value or maybe an error message. So the response handler should
look something like this:
void receiver_func (const MethodResponse &resp){ if (!resp.isOK())
{ ... return; } Mutex::Locker locker(receiver_mutex);
unsigned num = Integer(resp.getResult()).getInteger();
... }
| Create a receiver for the response. |
| Handle a potential error response. |
| Lock this area againt concurrent access if neccessary. |
| Extract and process the response values. |