SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Client.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_thrift_client_Client_h
7 #define swcdb_thrift_client_Client_h
8 
9 
11 namespace SWC {
12 
13 
27 namespace Thrift {}
28 
29 }
30 
31 
32 #include <thrift/transport/TSocket.h>
33 #include <thrift/transport/TTransportUtils.h>
34 #include <thrift/transport/TZlibTransport.h>
35 #include <thrift/protocol/TBinaryProtocol.h>
36 
37 #include "swcdb/thrift/gen-cpp/Service.h"
38 
39 
40 
41 namespace SWC {
42 namespace thrift = apache::thrift;
43 namespace Thrift {
44 
45 class CommClient {
46  public:
47 
48  CommClient(const std::string& host, const uint16_t port,
49  const uint32_t timeout, bool open=true) {
50  auto sock = new thrift::transport::TSocket(host, port);
51  sock->setConnTimeout(timeout);
52  sock->setSendTimeout(timeout);
53  sock->setRecvTimeout(timeout);
54  socket.reset(sock);
55  transport.reset(new thrift::transport::TFramedTransport(socket));
56  if(open)
57  transport->open();
58  protocol.reset(new thrift::protocol::TBinaryProtocol(transport));
59  }
60 
61  void open() {
62  if(!transport->isOpen())
63  transport->open();
64  }
65 
66  void close() {
67  if(transport->isOpen())
68  transport->close();
69  }
70 
71  virtual ~CommClient() noexcept {
72  if(transport) {
73  try { close(); } catch(...) {}
74  }
75  }
76 
77  protected:
78  std::shared_ptr<thrift::transport::TTransport> socket;
79  std::shared_ptr<thrift::transport::TTransport> transport;
80  std::shared_ptr<thrift::protocol::TProtocol> protocol;
81 };
82 
83 
84 class Client : public CommClient, public ServiceClient {
85  public:
86  typedef std::shared_ptr<Client> Ptr;
87 
88  static Ptr make(const std::string& host, const uint16_t port,
89  const uint32_t timeout_ms=900000) {
90  return Ptr(new Client(host, port, timeout_ms));
91  }
92 
93  Client(const std::string& host, const uint16_t port,
94  const uint32_t timeout_ms=900000, bool open = true)
95  : CommClient(host, port, timeout_ms, open),
96  ServiceClient(protocol) {
97  }
98 
99  virtual ~Client() noexcept { }
100 
101 };
102 
103 }} // namespace SWC::Thrift
104 
105 
106 
107 #ifdef SWC_IMPL_SOURCE
108 #include "swcdb/thrift/gen-cpp/Service.cpp"
109 #include "swcdb/thrift/gen-cpp/Service_types.cpp"
110 //#include "swcdb/thrift/Converters.cc"
111 #endif
112 
113 
114 #endif // swcdb_thrift_client_Client_h
SWC::Thrift::CommClient::open
void open()
Definition: Client.h:61
SWC::Thrift::Client::~Client
virtual ~Client() noexcept
Definition: Client.h:99
SWC::Thrift::CommClient::socket
std::shared_ptr< thrift::transport::TTransport > socket
Definition: Client.h:78
SWC::Thrift::CommClient::close
void close()
Definition: Client.h:66
SWC::Thrift::Client::Client
Client(const std::string &host, const uint16_t port, const uint32_t timeout_ms=900000, bool open=true)
Definition: Client.h:93
SWC::Thrift::Client::Ptr
std::shared_ptr< Client > Ptr
Definition: Client.h:86
SWC::Thrift::Client
Definition: Client.h:84
timeout_ms
uint32_t timeout_ms
Request timeout.
Definition: Header.h:58
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Thrift::CommClient::CommClient
CommClient(const std::string &host, const uint16_t port, const uint32_t timeout, bool open=true)
Definition: Client.h:48
SWC::Thrift::CommClient::transport
std::shared_ptr< thrift::transport::TTransport > transport
Definition: Client.h:79
SWC::Thrift::CommClient
Definition: Client.h:45
SWC::Thrift::CommClient::protocol
std::shared_ptr< thrift::protocol::TProtocol > protocol
Definition: Client.h:80
SWC::Thrift::Client::make
static Ptr make(const std::string &host, const uint16_t port, const uint32_t timeout_ms=900000)
Definition: Client.h:88
SWC::Thrift::CommClient::~CommClient
virtual ~CommClient() noexcept
Definition: Client.h:71