19 #ifndef INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP 20 #define INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP 22 #include <RCF/AsioBuffers.hpp> 23 #include <RCF/ByteBuffer.hpp> 24 #include <RCF/ClientTransport.hpp> 25 #include <RCF/Export.hpp> 26 #include <RCF/ReallocBuffer.hpp> 27 #include <RCF/RecursionLimiter.hpp> 28 #include <RCF/ThreadLibrary.hpp> 32 class ConnectedClientTransport;
34 class ClientFilterProxy;
36 class TcpClientTransport;
37 typedef std::shared_ptr<TcpClientTransport> TcpClientTransportPtr;
38 class TcpClientFilterProxy;
41 typedef std::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
43 class RCF_EXPORT ConnectedClientTransport :
public ClientTransport
47 ConnectedClientTransport(
const ConnectedClientTransport &rhs);
48 ConnectedClientTransport();
49 ~ConnectedClientTransport();
52 void setMaxSendSize(std::size_t maxSendSize);
53 std::size_t getMaxSendSize();
57 void read(
const ByteBuffer &byteBuffer_, std::size_t bytesRequested);
58 void write(
const std::vector<ByteBuffer> &byteBuffers);
59 std::size_t timedSend(
const std::vector<ByteBuffer> &data);
60 std::size_t timedReceive(ByteBuffer &byteBuffer, std::size_t bytesRequested);
62 void setTransportFilters(
const std::vector<FilterPtr> &filters);
63 void getTransportFilters(std::vector<FilterPtr> &filters);
64 void connectTransportFilters();
66 void getWireFilters(std::vector<FilterPtr> & filters);
68 void connect(ClientTransportCallback &clientStub,
unsigned int timeoutMs);
69 void disconnect(
unsigned int timeoutMs);
70 int timedSend(
const char *buffer, std::size_t bufferLen);
71 int timedReceive(
char *buffer, std::size_t bufferLen);
75 void onReadCompleted(
const ByteBuffer &byteBuffer);
76 void onWriteCompleted(std::size_t bytes);
78 friend class HttpServerTransport;
79 friend class AsioServerTransport;
80 friend class PublishingService;
81 void setWireFilters(
const std::vector<FilterPtr> & wireFilters);
85 std::size_t mMaxSendSize;
86 std::size_t mBytesTransferred;
87 std::size_t mBytesSent;
88 std::size_t mBytesRead;
89 std::size_t mBytesTotal;
92 unsigned int mEndTimeMs;
94 std::vector<FilterPtr> mTransportFilters;
95 std::vector<FilterPtr> mWireFilters;
96 std::vector<ByteBuffer> mByteBuffers;
97 std::vector<ByteBuffer> mSlicedByteBuffers;
98 ReallocBufferPtr mReadBufferPtr;
99 ReallocBufferPtr mReadBuffer2Ptr;
101 friend class ClientFilterProxy;
102 friend class ClientTcpFrame;
103 friend class ClientHttpFrame;
107 virtual std::size_t implRead(
108 const ByteBuffer &byteBuffer_,
109 std::size_t bytesRequested) = 0;
111 virtual std::size_t implReadAsync(
112 const ByteBuffer &byteBuffer_,
113 std::size_t bytesRequested) = 0;
115 virtual std::size_t implWrite(
116 const std::vector<ByteBuffer> &byteBuffers) = 0;
118 virtual std::size_t implWriteAsync(
119 const std::vector<ByteBuffer> &byteBuffers) = 0;
121 virtual void implConnect(
122 ClientTransportCallback &clientStub,
123 unsigned int timeoutMs) = 0;
125 virtual void implConnectAsync(
126 ClientTransportCallback &clientStub,
127 unsigned int timeoutMs) = 0;
129 virtual void implClose() = 0;
141 std::size_t mReadBufferPos;
142 std::size_t mWriteBufferPos;
144 ClientTransportCallback * mpClientStub;
146 ByteBuffer * mpClientStubReadBuffer;
147 ByteBuffer mReadBuffer;
148 std::size_t mBytesToRead;
149 std::size_t mBytesRequested;
150 ByteBuffer mByteBuffer;
153 friend class Subscription;
154 OverlappedAmiPtr mOverlappedPtr;
157 MutexPtr mSocketOpsMutexPtr;
159 AsioBuffers mAsioBuffers;
163 typedef std::shared_ptr<Lock> LockPtr;
165 AsioDeadlineTimerPtr mAsioTimerPtr;
167 friend class TcpClientFilterProxy;
174 std::uint32_t timeoutMs,
175 ClientTransportCallback *pClientStub);
177 void onTimerExpired();
180 RecursionState<std::size_t, int> mRecursionState;
185 void onTransitionCompleted(std::size_t bytesTransferred);
187 void onCompletion(
int bytesTransferred);
188 void onTimedRecvCompleted(
int ret,
int err);
189 void onTimedSendCompleted(
int ret,
int err);
190 void onConnectCompleted(
int err);
193 void onTransitionCompleted_(std::size_t bytesTransferred);
194 void issueRead(
const ByteBuffer &buffer, std::size_t bytesToRead);
195 void issueWrite(
const std::vector<ByteBuffer> &byteBuffers);
198 ClientTransportCallback &clientStub,
199 const std::vector<ByteBuffer> &data,
200 unsigned int timeoutMs);
203 ClientTransportCallback &clientStub,
204 ByteBuffer &byteBuffer,
205 unsigned int timeoutMs);
207 void setSocketOpsMutex(MutexPtr mutexPtr);
209 friend class OverlappedAmi;
215 #endif // ! INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP Definition: AmiIoHandler.hpp:24