RCFProto
 All Classes Functions Typedefs
TransportFactories.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2013, Delta V Software. All rights reserved.
6 // http://www.deltavsoft.com
7 //
8 // RCF is distributed under dual licenses - closed source or GPL.
9 // Consult your particular license for conditions of use.
10 //
11 // If you have not purchased a commercial license, you are using RCF
12 // under GPL terms.
13 //
14 // Version: 2.0
15 // Contact: support <at> deltavsoft.com
16 //
17 //******************************************************************************
18 
19 #ifndef INCLUDE_RCF_TEST_TRANSPORTFACTORIES_HPP
20 #define INCLUDE_RCF_TEST_TRANSPORTFACTORIES_HPP
21 
22 #include <RCF/RcfClient.hpp>
23 #include <RCF/ServerTransport.hpp>
24 #include <RCF/ClientTransport.hpp>
25 #include <RCF/IpAddress.hpp>
26 
27 template<typename Interface>
28 inline bool tryCreateRemoteObject(
29  RCF::I_RcfClient &rcfClient,
30  std::string objectName = "")
31 {
32  try
33  {
34  rcfClient.getClientStub().createRemoteObject(objectName);
35  return true;
36  }
37  catch (const RCF::Exception &e)
38  {
39  RCF_LOG_1()(e);
40  return false;
41  }
42 }
43 
44 
45 namespace RCF {
46 
47  typedef boost::shared_ptr<ClientTransportAutoPtr> ClientTransportAutoPtrPtr;
48 
49  typedef std::pair<ServerTransportPtr, ClientTransportAutoPtrPtr> TransportPair;
50 
51  class I_TransportFactory
52  {
53  public:
54  virtual ~I_TransportFactory() {}
55  virtual TransportPair createTransports() = 0;
56  virtual TransportPair createNonListeningTransports() = 0;
57  virtual bool isConnectionOriented() = 0;
58  virtual bool supportsTransportFilters() = 0;
59  virtual std::string desc() = 0;
60  };
61 
62  typedef boost::shared_ptr<I_TransportFactory> TransportFactoryPtr;
63 
64  typedef std::vector<TransportFactoryPtr> TransportFactories;
65 
66  TransportFactories &getTransportFactories();
67 
68  TransportFactories &getIpTransportFactories();
69 
70  //**************************************************
71  // transport factories
72 
73 #if RCF_FEATURE_NAMEDPIPE==1
74 
75  class Win32NamedPipeTransportFactory : public I_TransportFactory
76  {
77  public:
78  TransportPair createTransports();
79  TransportPair createNonListeningTransports();
80  bool isConnectionOriented();
81  bool supportsTransportFilters();
82  std::string desc();
83  };
84 
85 #endif
86 
87 #if RCF_FEATURE_TCP==1
88 
89  class TcpTransportFactory : public I_TransportFactory
90  {
91  public:
92 
93  TcpTransportFactory(IpAddress::Type type = IpAddress::V4);
94  TransportPair createTransports();
95  TransportPair createNonListeningTransports();
96  bool isConnectionOriented();
97  bool supportsTransportFilters();
98  std::string desc();
99 
100  private:
101 
102  std::string mLoopback;
103  };
104 
105 #endif
106 
107 #if RCF_FEATURE_HTTP==1
108 
109  class HttpTransportFactory : public I_TransportFactory
110  {
111  public:
112 
113  HttpTransportFactory();
114  TransportPair createTransports();
115  TransportPair createNonListeningTransports();
116  bool isConnectionOriented();
117  bool supportsTransportFilters();
118  std::string desc();
119 
120  private:
121  std::string mLoopback;
122  };
123 
124  class HttpsTransportFactory : public I_TransportFactory
125  {
126  public:
127 
128  HttpsTransportFactory();
129  TransportPair createTransports();
130  TransportPair createNonListeningTransports();
131  bool isConnectionOriented();
132  bool supportsTransportFilters();
133  std::string desc();
134 
135  private:
136  std::string mLoopback;
137  };
138 
139 
140 #endif
141 
142 #if RCF_FEATURE_LOCALSOCKET==1
143 
144  class UnixLocalTransportFactory : public I_TransportFactory
145  {
146  public:
147 
148  UnixLocalTransportFactory();
149 
150  private:
151 
152  TransportPair createTransports();
153  TransportPair createNonListeningTransports();
154  bool isConnectionOriented();
155  bool supportsTransportFilters();
156 
157  private:
158 
159  bool fileExists(const std::string & path);
160  std::string generateNewPipeName();
161  std::string desc();
162 
163  int mIndex;
164 
165  };
166 
167 #endif // RCF_HAS_LOCAL_SOCKETS
168 
169 #if RCF_FEATURE_UDP==1
170 
171  class UdpTransportFactory : public I_TransportFactory
172  {
173  public:
174 
175  UdpTransportFactory(IpAddress::Type type = IpAddress::V4);
176  TransportPair createTransports();
177  TransportPair createNonListeningTransports();
178  bool isConnectionOriented();
179  bool supportsTransportFilters();
180  std::string desc();
181 
182  private:
183 
184  std::string mLoopback;
185  };
186 
187 #endif
188 
189  void initializeTransportFactories();
190 
191 } // namespace RCF
192 
193 #endif // ! INCLUDE_RCF_TEST_TRANSPORTFACTORIES_HPP