You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
// HelloClient.cpp : A simple xmlrpc client. Usage: HelloClient serverHost serverPort |
|
// Link against xmlrpc lib and whatever socket libs your system needs (ws2_32.lib |
|
// on windows) |
|
#include "XmlRpc.h" |
|
#include <iostream> |
|
using namespace XmlRpc; |
|
|
|
int main(int argc, char* argv[]) |
|
{ |
|
if (argc != 3) { |
|
std::cerr << "Usage: HelloClient serverHost serverPort\n"; |
|
return -1; |
|
} |
|
int port = atoi(argv[2]); |
|
//XmlRpc::setVerbosity(5); |
|
|
|
// Use introspection API to look up the supported methods |
|
XmlRpcClient c(argv[1], port); |
|
XmlRpcValue noArgs, result; |
|
if (c.execute("system.listMethods", noArgs, result)) |
|
std::cout << "\nMethods:\n " << result << "\n\n"; |
|
else |
|
std::cout << "Error calling 'listMethods'\n\n"; |
|
|
|
// Use introspection API to get the help string for the Hello method |
|
XmlRpcValue oneArg; |
|
oneArg[0] = "Hello"; |
|
if (c.execute("system.methodHelp", oneArg, result)) |
|
std::cout << "Help for 'Hello' method: " << result << "\n\n"; |
|
else |
|
std::cout << "Error calling 'methodHelp'\n\n"; |
|
|
|
// Call the Hello method |
|
if (c.execute("Hello", noArgs, result)) |
|
std::cout << result << "\n\n"; |
|
else |
|
std::cout << "Error calling 'Hello'\n\n"; |
|
|
|
// Call the HelloName method |
|
oneArg[0] = "Chris"; |
|
if (c.execute("HelloName", oneArg, result)) |
|
std::cout << result << "\n\n"; |
|
else |
|
std::cout << "Error calling 'HelloName'\n\n"; |
|
|
|
// Add up an array of numbers |
|
XmlRpcValue numbers; |
|
numbers[0] = 33.33; |
|
numbers[1] = 112.57; |
|
numbers[2] = 76.1; |
|
std::cout << "numbers.size() is " << numbers.size() << std::endl; |
|
if (c.execute("Sum", numbers, result)) |
|
std::cout << "Sum = " << double(result) << "\n\n"; |
|
else |
|
std::cout << "Error calling 'Sum'\n\n"; |
|
|
|
// Test the "no such method" fault |
|
if (c.execute("NoSuchMethod", numbers, result)) |
|
std::cout << "NoSuchMethod call: fault: " << c.isFault() << ", result = " << result << std::endl; |
|
else |
|
std::cout << "Error calling 'Sum'\n"; |
|
|
|
// Test the multicall method. It accepts one arg, an array of structs |
|
XmlRpcValue multicall; |
|
multicall[0][0]["methodName"] = "Sum"; |
|
multicall[0][0]["params"][0] = 5.0; |
|
multicall[0][0]["params"][1] = 9.0; |
|
|
|
multicall[0][1]["methodName"] = "NoSuchMethod"; |
|
multicall[0][1]["params"][0] = ""; |
|
|
|
multicall[0][2]["methodName"] = "Sum"; |
|
// Missing params |
|
|
|
multicall[0][3]["methodName"] = "Sum"; |
|
multicall[0][3]["params"][0] = 10.5; |
|
multicall[0][3]["params"][1] = 12.5; |
|
|
|
if (c.execute("system.multicall", multicall, result)) |
|
std::cout << "\nmulticall result = " << result << std::endl; |
|
else |
|
std::cout << "\nError calling 'system.multicall'\n"; |
|
|
|
return 0; |
|
}
|
|
|