• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Hello(XmlRpcServer * s)17   Hello(XmlRpcServer* s) : XmlRpcServerMethod("Hello", s) {}
18 
execute(XmlRpcValue & params,XmlRpcValue & result)19   void execute(XmlRpcValue& params, XmlRpcValue& result)
20   {
21     result = "Hello";
22   }
23 
help()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:
HelloName(XmlRpcServer * s)33   HelloName(XmlRpcServer* s) : XmlRpcServerMethod("HelloName", s) {}
34 
execute(XmlRpcValue & params,XmlRpcValue & result)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:
Sum(XmlRpcServer * s)48   Sum(XmlRpcServer* s) : XmlRpcServerMethod("Sum", s) {}
49 
execute(XmlRpcValue & params,XmlRpcValue & result)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 
main(int argc,char * argv[])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