mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
reference: XmlRpcCall, XmlRpcSever, XmlRpcClient
git-svn-id: svn://ultimatepp.org/upp/trunk@1822 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
6dbea1df2e
commit
bf3f4990bb
10 changed files with 167 additions and 0 deletions
5
reference/XmlRpcCall/FoxRate.xrs
Normal file
5
reference/XmlRpcCall/FoxRate.xrs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
STRUCT(FoxResult2)
|
||||
BOOL (flerror)
|
||||
DOUBLE (amount)
|
||||
STRING (message)
|
||||
END_STRUCT
|
||||
11
reference/XmlRpcCall/XmlRpcCall.upp
Normal file
11
reference/XmlRpcCall/XmlRpcCall.upp
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
uses
|
||||
Core,
|
||||
XmlRpc;
|
||||
|
||||
file
|
||||
FoxRate.xrs,
|
||||
main.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
5
reference/XmlRpcCall/init
Normal file
5
reference/XmlRpcCall/init
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#ifndef _XmlRpcCall_icpp_init_stub
|
||||
#define _XmlRpcCall_icpp_init_stub
|
||||
#include "Core/init"
|
||||
#include "XmlRpc/init"
|
||||
#endif
|
||||
41
reference/XmlRpcCall/main.cpp
Normal file
41
reference/XmlRpcCall/main.cpp
Normal 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';
|
||||
}
|
||||
28
reference/XmlRpcClient/XmlRpcClient.cpp
Normal file
28
reference/XmlRpcClient/XmlRpcClient.cpp
Normal 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);
|
||||
}
|
||||
12
reference/XmlRpcClient/XmlRpcClient.upp
Normal file
12
reference/XmlRpcClient/XmlRpcClient.upp
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
description "Client for XmlRpcServer example\377";
|
||||
|
||||
uses
|
||||
Core,
|
||||
XmlRpc;
|
||||
|
||||
file
|
||||
XmlRpcClient.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
5
reference/XmlRpcClient/init
Normal file
5
reference/XmlRpcClient/init
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#ifndef _XmlRpcClient_icpp_init_stub
|
||||
#define _XmlRpcClient_icpp_init_stub
|
||||
#include "Core/init"
|
||||
#include "XmlRpc/init"
|
||||
#endif
|
||||
12
reference/XmlRpcServer/XmlRpcServer.upp
Normal file
12
reference/XmlRpcServer/XmlRpcServer.upp
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
description "XML-RPC simple server\377";
|
||||
|
||||
uses
|
||||
Core,
|
||||
XmlRpc;
|
||||
|
||||
file
|
||||
XmlRpcSrvTst.cpp;
|
||||
|
||||
mainconfig
|
||||
"" = "";
|
||||
|
||||
43
reference/XmlRpcServer/XmlRpcSrvTst.cpp
Normal file
43
reference/XmlRpcServer/XmlRpcSrvTst.cpp
Normal 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);
|
||||
}
|
||||
5
reference/XmlRpcServer/init
Normal file
5
reference/XmlRpcServer/init
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#ifndef _XmlRpcSrvTst_icpp_init_stub
|
||||
#define _XmlRpcSrvTst_icpp_init_stub
|
||||
#include "Core/init"
|
||||
#include "XmlRpc/init"
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue