// 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; }