Remote Call Framework 3.3
TcpServerTransport.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_TCPSERVERTRANSPORT_HPP
19 #define INCLUDE_RCF_TCPSERVERTRANSPORT_HPP
20 
21 #include <RCF/AsioServerTransport.hpp>
22 
23 #include <RCF/IpAddress.hpp>
25 
26 namespace RCF {
27 
28  class TcpServerTransport;
29 
30  class RCF_EXPORT TcpNetworkSession : public AsioNetworkSession
31  {
32  public:
33 
34  TcpNetworkSession(
35  TcpServerTransport &transport,
36  AsioIoService & ioService);
37 
38  virtual ~TcpNetworkSession();
39 
40  const RemoteAddress & implGetRemoteAddress();
41 
42  void implRead(char * buffer, std::size_t bufferLen);
43 
44  void implWrite(const std::vector<ByteBuffer> & buffers);
45 
46  void implWrite(
47  AsioNetworkSession &toBeNotified,
48  const char * buffer,
49  std::size_t bufferLen);
50 
51  void implAccept();
52 
53  bool implOnAccept();
54 
55  void implClose();
56 
57  void implCloseAfterWrite();
58 
59  bool implIsConnected();
60 
61  ClientTransportUniquePtr implCreateClientTransport();
62 
63  void implTransferNativeFrom(ClientTransport & clientTransport);
64 
65  int getNativeHandle();
66 
67  private:
68 
69  AsioSocketPtr mSocketPtr;
70  IpAddress mIpAddress;
71  int mWriteCounter;
72  };
73 
74  class RCF_EXPORT TcpServerTransport :
75  public AsioServerTransport,
76  public IpServerTransport
77  {
78  public:
79  TcpServerTransport(const IpAddress & ipAddress);
80  TcpServerTransport(const std::string & ip, int port);
81 
82  TransportType getTransportType();
83 
84  ServerTransportPtr clone();
85 
86  // IpServerTransport implementation
87  int getPort() const;
88 
89  private:
90 
91  AsioNetworkSessionPtr implCreateNetworkSession();
92  void implOpen();
93 
94  void onServerStart(RcfServer & server);
95 
96  ClientTransportUniquePtr implCreateClientTransport(
97  const Endpoint &endpoint);
98 
99  private:
100  IpAddress mIpAddress;
101 
102  int mAcceptorFd;
103  };
104 
105 } // namespace RCF
106 
107 #endif // ! INCLUDE_RCF_TCPSERVERTRANSPORT_HPP
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
std::shared_ptr< ServerTransport > ServerTransportPtr
Unique pointer wrapper for RCF::ServerTransport.
Definition: RcfFwd.hpp:46