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