reference: XmlRpcCall, XmlRpcSever, XmlRpcClient

git-svn-id: svn://ultimatepp.org/upp/trunk@1822 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2009-12-20 20:27:56 +00:00
parent 6dbea1df2e
commit bf3f4990bb
10 changed files with 167 additions and 0 deletions

View file

@ -0,0 +1,5 @@
STRUCT(FoxResult2)
BOOL (flerror)
DOUBLE (amount)
STRING (message)
END_STRUCT

View file

@ -0,0 +1,11 @@
uses
Core,
XmlRpc;
file
FoxRate.xrs,
main.cpp;
mainconfig
"" = "";

View file

@ -0,0 +1,5 @@
#ifndef _XmlRpcCall_icpp_init_stub
#define _XmlRpcCall_icpp_init_stub
#include "Core/init"
#include "XmlRpc/init"
#endif

View file

@ -0,0 +1,41 @@
#include <XmlRpc/XmlRpc.h>
using namespace Upp;
struct FoxResult {
bool flerror;
double amount;
String message;
void Map(ValueMapper& m) {
m("flerror", flerror)("amount", amount)("message", message);
}
};
#define XRSFILE <XmlRpcCall/FoxRate.xrs>
#include <XmlRpc/Xrs.h>
CONSOLE_APP_MAIN
{
FoxResult r;
if(XmlRpcCall("http://foxrate.org/rpc")
.Method("foxrate.currencyConvert")
<< "USD" << "GBP" << 120
>> r)
if(r.flerror)
Cout() << "Server reported error\n";
else
Cout() << r.amount << '\n';
else
Cout() << "Failed.\n";
FoxResult2 r2;
XmlRpcCall foxrate("http://foxrate.org/rpc");
if(foxrate("foxrate.currencyConvert", "GBP", "USD", 130.0) >> r2)
if(r2.flerror)
Cout() << "Server reported error\n";
else
Cout() << r2.amount << '\n';
else
Cout() << "Failed: " << foxrate.GetError() << '\n';
}

View file

@ -0,0 +1,28 @@
#include <XmlRpc/XmlRpc.h>
using namespace Upp;
void Compute(double a, String op, double b)
{
double result;
Cout() << a << op << b << '=';
XmlRpcCall call("127.0.0.1:1234");
if(call("compute", a, op, b) >> result)
Cout() << result;
else
Cout() << " error: " << call.GetError();
Cout() << '\n';
}
CONSOLE_APP_MAIN
{
Time tm;
XmlRpcCall("127.0.0.1:1234")("ping") >> tm;
Cout() << tm << '\n';
Compute(12, "+", 12);
Compute(12, "*", 12);
Compute(12, "+56", 12);
Compute(12, "/", 0);
}

View file

@ -0,0 +1,12 @@
description "Client for XmlRpcServer example\377";
uses
Core,
XmlRpc;
file
XmlRpcClient.cpp;
mainconfig
"" = "";

View file

@ -0,0 +1,5 @@
#ifndef _XmlRpcClient_icpp_init_stub
#define _XmlRpcClient_icpp_init_stub
#include "Core/init"
#include "XmlRpc/init"
#endif

View file

@ -0,0 +1,12 @@
description "XML-RPC simple server\377";
uses
Core,
XmlRpc;
file
XmlRpcSrvTst.cpp;
mainconfig
"" = "";

View file

@ -0,0 +1,43 @@
#include <XmlRpc/XmlRpc.h>
using namespace Upp;
XMLRPC_METHOD(compute)
{
double a, b;
String op;
rpc >> a >> op >> b;
Cout() << "Request: " << a << op << b << '\n';
if(op.GetCount() == 1)
switch(*op) {
case '+':
rpc << a + b;
return;
case '-':
rpc << a - b;
return;
case '/':
if(b == 0)
rpc << ErrorValue("division by zero");
else
rpc << a / b;
return;
case '*':
rpc << a * b;
return;
}
rpc << ErrorValue("unknown operator");
}
XMLRPC_METHOD(ping)
{
rpc << GetSysTime();
}
namespace Upp { extern bool HttpClient_Trace__; }
CONSOLE_APP_MAIN
{
Cout() << "Server..\n";
XmlRpcServer(1234);
}

View file

@ -0,0 +1,5 @@
#ifndef _XmlRpcSrvTst_icpp_init_stub
#define _XmlRpcSrvTst_icpp_init_stub
#include "Core/init"
#include "XmlRpc/init"
#endif