Remote Call Framework 3.2
MulticastClientTransport.hpp
1 
2 //******************************************************************************
3 // RCF - Remote Call Framework
4 //
5 // Copyright (c) 2005 - 2020, 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: 3.2
15 // Contact: support <at> deltavsoft.com
16 //
17 //******************************************************************************
18 
19 #ifndef INCLUDE_RCF_MULTICASTCLIENTTRANSPORT_HPP
20 #define INCLUDE_RCF_MULTICASTCLIENTTRANSPORT_HPP
21 
22 #include <memory>
23 #include <string>
24 #include <vector>
25 
26 #include <RCF/ClientTransport.hpp>
27 #include <RCF/Export.hpp>
28 #include <RCF/ThreadLibrary.hpp>
29 
30 namespace RCF {
31 
32  typedef std::shared_ptr< ClientTransportUniquePtr > ClientTransportUniquePtrPtr;
33  typedef std::vector< ClientTransportUniquePtrPtr > ClientTransportList;
34 
35  // Special purpose client transport for sending messages in parallel on multiple sub-transports.
36  class RCF_EXPORT MulticastClientTransport : public ClientTransport
37  {
38  public:
39 
40  TransportType getTransportType();
41 
42  std::unique_ptr<ClientTransport> clone() const;
43 
44  EndpointPtr getEndpointPtr() const;
45 
46  void doSendOnTransports(
47  Lock& lock,
48  ClientTransportList& transportList,
49  const std::vector<ByteBuffer> & data,
50  unsigned int timeoutMs);
51 
52  int send(
53  ClientTransportCallback & clientStub,
54  const std::vector<ByteBuffer> & data,
55  unsigned int timeoutMs);
56 
57  int receive(
58  ClientTransportCallback & clientStub,
59  ByteBuffer & byteBuffer,
60  unsigned int timeoutMs);
61 
62  bool isConnected();
63 
64  void connect(
65  ClientTransportCallback & clientStub,
66  unsigned int timeoutMs);
67 
68  void disconnect(
69  unsigned int timeoutMs);
70 
71  void addTransport(
72  ClientTransportUniquePtr clientTransportUniquePtr);
73 
74  void setTransportFilters(
75  const std::vector<FilterPtr> & filters);
76 
77  void getTransportFilters(
78  std::vector<FilterPtr> & filters);
79 
80  void setTimer(std::uint32_t timeoutMs, ClientTransportCallback *pClientStub);
81 
82  void dropIdleTransports();
83  void pingAllTransports();
84 
85  void close();
86 
87  std::size_t getTransportCount();
88 
89  private:
90 
91  void bringInNewTransports();
92 
93  Mutex mClientTransportsMutex;
94  ClientTransportList mClientTransports;
95  ClientTransportList mClientTransportsTemp;
96  ClientTransportList mClientTransportsSending;
97 
98  Mutex mAddedClientTransportsMutex;
99  ClientTransportList mAddedClientTransports;
100 
101  ClientTransportUniquePtr mMulticastTemp;
102  };
103 
104 } // namespace RCF
105 
106 #endif // ! INCLUDE_RCF_MULTICASTCLIENTTRANSPORT_HPP
std::shared_ptr< Endpoint > EndpointPtr
Reference counted wrapper for RCF::Endpoint.
Definition: RcfFwd.hpp:118
std::unique_ptr< ClientTransport > ClientTransportUniquePtr
Unique pointer wrapper for RCF::ClientTransport.
Definition: RcfFwd.hpp:44
Definition: AmiIoHandler.hpp:24
TransportType
Describes the transport types used by a RCF connection.
Definition: Enums.hpp:34