#include <iostream>
#include <sstream>
#include <string>
#include <boost/test/minimal.hpp>
#include <RCF/Idl.hpp>
#include <RCF/RcfServer.hpp>
#include <RCF/test/EndpointFactories.hpp>
#include <RCF/test/TransportFactories.hpp>
#include <RCF/util/CommandLine.hpp>
#include <RCF/util/PortNumbers.hpp>
#include <SF/memory.hpp>
RCF_BEGIN(I_X, "I_X")
RCF_METHOD_V0(void, increment);
RCF_METHOD_R0(int, getCount);
RCF_END(I_X);
class X
{
public:
X() : count()
{}
void increment()
{
count++;
}
int getCount()
{
return count;
}
private:
int count;
};
int test_main(int argc, char **argv)
{
util::CommandLine::getSingleton().parse(argc, argv);
for (unsigned int i=0; i<RCF::getEndpointPairFactories().size(); ++i)
{
RCF::EndpointPair endpointPair = RCF::getEndpointPairFactories()[i]->createEndpointPair();
const RCF::I_Endpoint &serverEndpoint = *endpointPair.first;
const RCF::I_Endpoint &clientEndpoint = *endpointPair.second;
std::string s;
X x;
RCF::RcfServer server(serverEndpoint);
server.bind<I_X>(x);
server.start();
RcfClient<I_X> client(clientEndpoint);
client.increment();
std::ostringstream os;
SF::OTextStream(os) << client;
s = os.str();
RCF_TRACE("")(s);
{
RcfClient<I_X> client2;
std::istringstream is(s);
SF::ITextStream(is) >> client2;
client2.increment();
}
{
RcfClient<I_X> client3;
std::istringstream is(s);
SF::ITextStream(is) >> client3;
client3.increment();
}
int count = client.getCount();
BOOST_CHECK(count == 3);
}
return boost::exit_success;
}