1 // HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort 2 // 3 #include "XmlRpc.h" 4 5 #include <iostream> 6 #include <stdlib.h> 7 8 using namespace XmlRpc; 9 10 // The server 11 XmlRpcServer s; 12 13 // No arguments, result is "Hello". 14 class Hello : public XmlRpcServerMethod 15 { 16 public: 17 Hello(XmlRpcServer* s) : XmlRpcServerMethod("Hello", s) {} 18 19 void execute(XmlRpcValue& params, XmlRpcValue& result) 20 { 21 result = "Hello"; 22 } 23 24 std::string help() { return std::string("Say hello"); } 25 26 } hello(&s); // This constructor registers the method with the server 27 28 29 // One argument is passed, result is "Hello, " + arg. 30 class HelloName : public XmlRpcServerMethod 31 { 32 public: 33 HelloName(XmlRpcServer* s) : XmlRpcServerMethod("HelloName", s) {} 34 35 void execute(XmlRpcValue& params, XmlRpcValue& result) 36 { 37 std::string resultString = "Hello, "; 38 resultString += std::string(params[0]); 39 result = resultString; 40 } 41 } helloName(&s); 42 43 44 // A variable number of arguments are passed, all doubles, result is their sum. 45 class Sum : public XmlRpcServerMethod 46 { 47 public: 48 Sum(XmlRpcServer* s) : XmlRpcServerMethod("Sum", s) {} 49 50 void execute(XmlRpcValue& params, XmlRpcValue& result) 51 { 52 int nArgs = params.size(); 53 double sum = 0.0; 54 for (int i=0; i<nArgs; ++i) 55 sum += double(params[i]); 56 result = sum; 57 } 58 } sum(&s); 59 60 61 int main(int argc, char* argv[]) 62 { 63 if (argc != 2) { 64 std::cerr << "Usage: HelloServer serverPort\n"; 65 return -1; 66 } 67 int port = atoi(argv[1]); 68 69 XmlRpc::setVerbosity(5); 70 71 // Create the server socket on the specified port 72 s.bindAndListen(port); 73 74 // Enable introspection 75 s.enableIntrospection(true); 76 77 // Wait for requests indefinitely 78 s.work(-1.0); 79 80 return 0; 81 } 82 83