diff --git a/reference/XmlRpcCall/FoxRate.xrs b/reference/XmlRpcCall/FoxRate.xrs new file mode 100644 index 000000000..b25d6a145 --- /dev/null +++ b/reference/XmlRpcCall/FoxRate.xrs @@ -0,0 +1,5 @@ +STRUCT(FoxResult2) + BOOL (flerror) + DOUBLE (amount) + STRING (message) +END_STRUCT diff --git a/reference/XmlRpcCall/XmlRpcCall.upp b/reference/XmlRpcCall/XmlRpcCall.upp new file mode 100644 index 000000000..1254a9f1d --- /dev/null +++ b/reference/XmlRpcCall/XmlRpcCall.upp @@ -0,0 +1,11 @@ +uses + Core, + XmlRpc; + +file + FoxRate.xrs, + main.cpp; + +mainconfig + "" = ""; + diff --git a/reference/XmlRpcCall/init b/reference/XmlRpcCall/init new file mode 100644 index 000000000..4c739f419 --- /dev/null +++ b/reference/XmlRpcCall/init @@ -0,0 +1,5 @@ +#ifndef _XmlRpcCall_icpp_init_stub +#define _XmlRpcCall_icpp_init_stub +#include "Core/init" +#include "XmlRpc/init" +#endif diff --git a/reference/XmlRpcCall/main.cpp b/reference/XmlRpcCall/main.cpp new file mode 100644 index 000000000..6d7a6c342 --- /dev/null +++ b/reference/XmlRpcCall/main.cpp @@ -0,0 +1,41 @@ +#include + +using namespace Upp; + +struct FoxResult { + bool flerror; + double amount; + String message; + + void Map(ValueMapper& m) { + m("flerror", flerror)("amount", amount)("message", message); + } +}; + +#define XRSFILE +#include + +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'; +} diff --git a/reference/XmlRpcClient/XmlRpcClient.cpp b/reference/XmlRpcClient/XmlRpcClient.cpp new file mode 100644 index 000000000..e0acc0257 --- /dev/null +++ b/reference/XmlRpcClient/XmlRpcClient.cpp @@ -0,0 +1,28 @@ +#include + +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); +} diff --git a/reference/XmlRpcClient/XmlRpcClient.upp b/reference/XmlRpcClient/XmlRpcClient.upp new file mode 100644 index 000000000..d90f021c7 --- /dev/null +++ b/reference/XmlRpcClient/XmlRpcClient.upp @@ -0,0 +1,12 @@ +description "Client for XmlRpcServer example\377"; + +uses + Core, + XmlRpc; + +file + XmlRpcClient.cpp; + +mainconfig + "" = ""; + diff --git a/reference/XmlRpcClient/init b/reference/XmlRpcClient/init new file mode 100644 index 000000000..42cb7f228 --- /dev/null +++ b/reference/XmlRpcClient/init @@ -0,0 +1,5 @@ +#ifndef _XmlRpcClient_icpp_init_stub +#define _XmlRpcClient_icpp_init_stub +#include "Core/init" +#include "XmlRpc/init" +#endif diff --git a/reference/XmlRpcServer/XmlRpcServer.upp b/reference/XmlRpcServer/XmlRpcServer.upp new file mode 100644 index 000000000..8e672a61b --- /dev/null +++ b/reference/XmlRpcServer/XmlRpcServer.upp @@ -0,0 +1,12 @@ +description "XML-RPC simple server\377"; + +uses + Core, + XmlRpc; + +file + XmlRpcSrvTst.cpp; + +mainconfig + "" = ""; + diff --git a/reference/XmlRpcServer/XmlRpcSrvTst.cpp b/reference/XmlRpcServer/XmlRpcSrvTst.cpp new file mode 100644 index 000000000..99dccde55 --- /dev/null +++ b/reference/XmlRpcServer/XmlRpcSrvTst.cpp @@ -0,0 +1,43 @@ +#include + +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); +} diff --git a/reference/XmlRpcServer/init b/reference/XmlRpcServer/init new file mode 100644 index 000000000..45dc823a0 --- /dev/null +++ b/reference/XmlRpcServer/init @@ -0,0 +1,5 @@ +#ifndef _XmlRpcSrvTst_icpp_init_stub +#define _XmlRpcSrvTst_icpp_init_stub +#include "Core/init" +#include "XmlRpc/init" +#endif