diff --git a/upptst/XmlRpcClient/XmlRpcClient.cpp b/upptst/XmlRpcClient/XmlRpcClient.cpp new file mode 100644 index 000000000..af2570736 --- /dev/null +++ b/upptst/XmlRpcClient/XmlRpcClient.cpp @@ -0,0 +1,40 @@ +#include +#include + +using namespace Upp; + +namespace Upp { + extern bool HttpRequest_Trace__; +} + +void Compute( double a, Upp::String arithmeticOperator, double b ); + +int main() { + Time serverTime; + SetDateFormat( "%4d-%02d-%02d" ); + XmlRpcRequest call( "127.0.0.1:1234" ); + if( call("GetServerTime") >> serverTime ) { + LOG( "Server Time = " << serverTime ); + } + else { + LOG( Upp::Format("Error: %s", call.GetError()) ); + } + + Compute( 12, "+", 12 ); + Compute( 12, "*", 12 ); + Compute( 12, "+56", 12 ); + Compute( 12, "/", 0 ); + + return 0; +} + +void Compute( double a, Upp::String arithmeticOperator, double b ) { + double result = 0; + XmlRpcRequest call( "127.0.0.1:1234" ); + if( call("Compute", a, arithmeticOperator, b) >> result ) { + LOG( Upp::Format("%f %s %f = %f", a, arithmeticOperator, b, result) ); + } + else { + LOG( Upp::Format("Error: %s", call.GetError()) ); + } +} diff --git a/upptst/XmlRpcClient/XmlRpcClient.upp b/upptst/XmlRpcClient/XmlRpcClient.upp new file mode 100644 index 000000000..becf6e170 --- /dev/null +++ b/upptst/XmlRpcClient/XmlRpcClient.upp @@ -0,0 +1,10 @@ +uses + Core, + Core\XmlRpc; + +file + XmlRpcClient.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/upptst/XmlRpcClient/init b/upptst/XmlRpcClient/init new file mode 100644 index 000000000..a2af62db3 --- /dev/null +++ b/upptst/XmlRpcClient/init @@ -0,0 +1,5 @@ +#ifndef _XmlRpcClient_icpp_init_stub +#define _XmlRpcClient_icpp_init_stub +#include "Core/init" +#include "Core\XmlRpc/init" +#endif diff --git a/upptst/XmlRpcServer/XmlRpcServer.cpp b/upptst/XmlRpcServer/XmlRpcServer.cpp new file mode 100644 index 000000000..160c5649b --- /dev/null +++ b/upptst/XmlRpcServer/XmlRpcServer.cpp @@ -0,0 +1,71 @@ +#include +#include +#include + +using namespace Upp; + +XMLRPC_METHOD( Compute ) { + double a, b; + Upp::String arithmeticOperator; + rpc >> a >> arithmeticOperator >> b; + LOG( Upp::Format("Request: %nf %s %nf", a, arithmeticOperator, b) ); + + if( arithmeticOperator.GetCount() == 1 ) { + switch( *arithmeticOperator ) { + case '+': { + rpc << a + b; + break; + } + case '-': { + rpc << a - b; + break; + } + case '/': { + if( b == 0 ) { + rpc << Upp::ErrorValue("division by zero"); + } + else { + rpc << a / b; + } + break; + } + case '*': { + rpc << a * b; + break; + } + } + } + else { + rpc << Upp::ErrorValue("unknown operator"); + } +} + +XMLRPC_METHOD( GetServerTime ) { + LOG( "Request: GetServerTime" ); + rpc << Upp::GetSysTime(); +} + +int main() { + TcpSocket rpc; + int port = 1234; + + if( !rpc.Listen(port,5) ) { + return false; + } + + while( true ) { + if( _kbhit() ) { + if( _getch() == 27 ){ + break; + } + } + + TcpSocket http; + http.Timeout(1000); + if( http.Accept(rpc) ) { + XmlRpcPerform(http,NULL); + } + } + + return 0; +} diff --git a/upptst/XmlRpcServer/XmlRpcServer.upp b/upptst/XmlRpcServer/XmlRpcServer.upp new file mode 100644 index 000000000..86f715201 --- /dev/null +++ b/upptst/XmlRpcServer/XmlRpcServer.upp @@ -0,0 +1,10 @@ +uses + Core, + XmlRpc; + +file + XmlRpcServer.cpp; + +mainconfig + "" = "SSE2"; + diff --git a/upptst/XmlRpcServer/init b/upptst/XmlRpcServer/init new file mode 100644 index 000000000..7ce9c7359 --- /dev/null +++ b/upptst/XmlRpcServer/init @@ -0,0 +1,5 @@ +#ifndef _XmlRpcServer_icpp_init_stub +#define _XmlRpcServer_icpp_init_stub +#include "Core/init" +#include "XmlRpc/init" +#endif