Home | History | Annotate | Download | only in test
      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