thrift-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bjørn Borud <bbo...@gmail.com>
Subject Re: C++ code snippets
Date Tue, 25 May 2010 21:48:56 GMT
This would seem to suggest you have your own in-house portmapper-
thingey. Interesting. I am considering open sourcing something that
adresses, among other things, that subproblem.

-bjørn

-- 
Sent from my iPhone

On 25. mai 2010, at 21.58, Richard Salz <rsalz@us.ibm.com> wrote:

> We find ourselves writing the same code snippets over and over again.
> Perhaps this is useful to others.
>
> For clients:
>
> template<class xxxClient>
> xxxClient*
> getClient(const char* sname, const char* host="127.0.0.1")
> {
>        int port = applianceUtils::getPortforService(sname); /// @TODO:
> XXX your "portmapper" here.
>        shared_ptr<TSocket> socket(new TSocket(host, port));
>        shared_ptr<TBufferedTransport> bufferedSocket(new
> TBufferedTransport(socket));
>        bufferedSocket->open();
>        shared_ptr<TBinaryProtocol> protocol(new
> TBinaryProtocol(bufferedSocket));
>        return new xxxClient(protocol);
> }
>
> Usage:
>        shared_ptr<userManagerClient>
> c(getClient<userManagerClient>("usermanager"));
>        c->login(name, password);
>        c->logout();
>        ... connection closed when "c" goes out of scope
>
> For servers we use this:  Obviously you can add more common prolog/
> epilog
> (like logging), make TSimpleServer be a template parameter, etc.
>
> template<class xxxManager, class xxxManagerProcessor>
> static void
> RunServer(int port, xxxManager* impl)
> {
>        shared_ptr<xxxManager> s(impl);
>        shared_ptr<TProcessor> processor(new xxxManagerProcessor(s));
>        shared_ptr<TServerTransport> transport(new TServerSocket
> (port));
>        shared_ptr<TTransportFactory> tfactory(new
> TBufferedTransportFactory());
>        shared_ptr<TProtocolFactory> pfactory(new
> TBinaryProtocolFactory());
>        TSimpleServer server(processor, transport, tfactory, pfactory);
>        server.serve();
> }
>
> Usage:
>        RunServer<hardwareManager, hardwareManagerProcessor>(
>                applianceUtils::getPortforService("hardwaremanager");
>                new hardwareManagerServer());
>
> Hopefully this will save *dozens* of lines of code world-wide. :)
>
>        /r$
>
> --
> STSM, WebSphere Appliance Architect
> https://www.ibm.com/developerworks/mydeveloperworks/blogs/soma/
>

Mime
View raw message