1// HelloServer.cpp : Simple XMLRPC server example. Usage: HelloServer serverPort
2//
3#include "XmlRpc.h"
4
5#include <iostream>
6#include <stdlib.h>
7
8using namespace XmlRpc;
9
10// The server
11XmlRpcServer s;
12
13// No arguments, result is "Hello".
14class Hello : public XmlRpcServerMethod
15{
16public:
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.
30class HelloName : public XmlRpcServerMethod
31{
32public:
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.
45class Sum : public XmlRpcServerMethod
46{
47public:
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
61int 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