1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
/*=============================================================================
sample_add_client_complex.cpp
===============================================================================
This is an example of an XML-RPC client that uses XML-RPC for C/C++
(Xmlrpc-c).
In particular, it uses the complex lower-level interface that gives you
lots of flexibility but requires lots of code. Also see
xmlrpc_sample_add_server, which does the same thing as this program,
but with much simpler code because it uses a simpler facility of
Xmlrpc-c.
This program actually gains nothing from using the more difficult
facility. It is for demonstration purposes.
=============================================================================*/
#include <cassert>
#include <cstdlib>
#include <string>
#include <iostream>
#include <xmlrpc-c/girerr.hpp>
#include <xmlrpc-c/base.hpp>
#include <xmlrpc-c/client.hpp>
using namespace std;
int
main(int argc, char **) {
if (argc-1 > 0) {
cerr << "This program has no arguments" << endl;
exit(1);
}
try {
xmlrpc_c::clientXmlTransport_curl myTransport(
xmlrpc_c::clientXmlTransport_curl::constrOpt()
.no_ssl_verifyhost(true)
.user_agent("sample_add/1.0"));
xmlrpc_c::client_xml myClient(&myTransport);
string const methodName("sample.add");
xmlrpc_c::paramList sampleAddParms;
sampleAddParms.add(xmlrpc_c::value_int(5));
sampleAddParms.add(xmlrpc_c::value_int(7));
xmlrpc_c::rpcPtr myRpcP(methodName, sampleAddParms);
string const serverUrl("http://localhost:8080/RPC2");
xmlrpc_c::carriageParm_curl0 myCarriageParm(serverUrl);
myRpcP->call(&myClient, &myCarriageParm);
assert(myRpcP->isFinished());
int const sum(xmlrpc_c::value_int(myRpcP->getResult()));
// Assume the method returned an integer; throws error if not
cout << "Result of RPC (sum of 5 and 7): " << sum << endl;
} catch (girerr::error const error) {
cerr << "Client threw error: " << error.what() << endl;
} catch (...) {
cerr << "Client threw unexpected error." << endl;
}
return 0;
}
|