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