|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define WIN32_LEAN_AND_MEAN |
|
|
|
|
|
#include <cassert> |
|
|
#include <iostream> |
|
|
|
|
|
using namespace std; |
|
|
|
|
|
#include <xmlrpc-c/base.hpp> |
|
|
#include <xmlrpc-c/registry.hpp> |
|
|
#include <xmlrpc-c/server_abyss.hpp> |
|
|
|
|
|
class sampleAddMethod : public xmlrpc_c::method { |
|
|
public: |
|
|
sampleAddMethod() { |
|
|
|
|
|
|
|
|
|
|
|
this->_signature = "i:ii"; |
|
|
this->_help = "This method adds two integers together"; |
|
|
} |
|
|
void |
|
|
execute(xmlrpc_c::paramList const& paramList, |
|
|
xmlrpc_c::value * const retvalP) { |
|
|
|
|
|
int const addend(paramList.getInt(0)); |
|
|
int const adder(paramList.getInt(1)); |
|
|
|
|
|
paramList.verifyEnd(2); |
|
|
|
|
|
*retvalP = xmlrpc_c::value_int(addend + adder); |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
int |
|
|
main(int const, |
|
|
const char ** const) { |
|
|
|
|
|
try { |
|
|
xmlrpc_c::registry myRegistry; |
|
|
|
|
|
xmlrpc_c::methodPtr const sampleAddMethodP(new sampleAddMethod); |
|
|
|
|
|
myRegistry.addMethod("sample.add", sampleAddMethodP); |
|
|
|
|
|
xmlrpc_c::serverAbyss myAbyssServer( |
|
|
xmlrpc_c::serverAbyss::constrOpt() |
|
|
.registryP(&myRegistry) |
|
|
.portNumber(8080) |
|
|
.logFileName("/tmp/xmlrpc_log")); |
|
|
|
|
|
while (true) { |
|
|
cout << "Waiting for next RPC..." << endl; |
|
|
|
|
|
myAbyssServer.runOnce(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} catch (exception const& e) { |
|
|
cerr << "Something failed. " << e.what() << endl; |
|
|
} |
|
|
return 0; |
|
|
} |
|
|
|