rpcclient.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2011 Tommi Maekitalo
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 
29 #ifndef CXXTOOLS_JSON_RPCCLIENT_H
30 #define CXXTOOLS_JSON_RPCCLIENT_H
31 
32 #include <cxxtools/remoteclient.h>
33 #include <string>
34 
35 namespace cxxtools
36 {
37 
38 class SelectorBase;
39 
40 namespace net
41 {
42 
43 class AddrInfo;
44 class Uri;
45 
46 }
47 
48 namespace json
49 {
50 
51 class RpcClientImpl;
52 
53 class RpcClient : public RemoteClient
54 {
55  RpcClientImpl* _impl;
56  RpcClientImpl* getImpl();
57  const RpcClientImpl* getImpl() const
58  { return const_cast<RpcClient*>(this)->getImpl(); }
59 
60  public:
62  : _impl(0)
63  { }
64 
65  explicit RpcClient(SelectorBase& selector)
66  : _impl(0)
67  { setSelector(selector); }
68 
69  explicit RpcClient(const net::AddrInfo& addr);
70  RpcClient(const std::string& addr, unsigned short port);
71  explicit RpcClient(const net::Uri& uri);
72 
73  RpcClient(SelectorBase& selector, const net::AddrInfo& addr);
74  RpcClient(SelectorBase& selector, const std::string& addr, unsigned short port);
75  RpcClient(SelectorBase& selector, const net::Uri& uri);
76 
77  RpcClient(const RpcClient&);
79 
80  virtual ~RpcClient();
81 
82  void prepareConnect(const net::AddrInfo& addr);
83  void prepareConnect(const std::string& addr, unsigned short port);
84  void prepareConnect(const net::Uri& uri);
85 
86  void ssl(bool sw);
87 
88  void connect(const net::AddrInfo& addrinfo, bool ssl_ = false)
89  { prepareConnect(addrinfo); ssl(ssl_); connect(); }
90 
91  void connect(const std::string& host, unsigned short int port, bool ssl_ = false)
92  { prepareConnect(host, port); ssl(ssl_); connect(); }
93 
94  void connect(const net::Uri& uri)
95  { prepareConnect(uri); connect(); }
96 
97  void connect();
98 
99  void close();
100 
101  void setSelector(SelectorBase& selector);
102 
103  void beginCall(IComposer& r, IRemoteProcedure& method, IDecomposer** argv, unsigned argc);
104 
105  void endCall();
106 
107  void call(IComposer& r, IRemoteProcedure& method, IDecomposer** argv, unsigned argc);
108 
109  Milliseconds timeout() const;
110  void timeout(Milliseconds t);
111 
114 
115  const IRemoteProcedure* activeProcedure() const;
116 
117  void cancel();
118 
119  void wait(Milliseconds msecs = WaitInfinite);
120 
121  const std::string& prefix() const;
122 
123  void prefix(const std::string& p);
124 
125 };
126 
127 }
128 
129 }
130 
131 #endif // CXXTOOLS_JSON_RPCCLIENT_H