18 #ifndef INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP 19 #define INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP 21 #include <RCF/AsioBuffers.hpp> 22 #include <RCF/ByteBuffer.hpp> 23 #include <RCF/ClientTransport.hpp> 24 #include <RCF/Export.hpp> 25 #include <RCF/ReallocBuffer.hpp> 26 #include <RCF/RecursionLimiter.hpp> 27 #include <RCF/ThreadLibrary.hpp> 31 class ConnectedClientTransport;
33 class ClientFilterProxy;
35 class TcpClientTransport;
36 typedef std::shared_ptr<TcpClientTransport> TcpClientTransportPtr;
37 class TcpClientFilterProxy;
40 typedef std::shared_ptr<OverlappedAmi> OverlappedAmiPtr;
42 class RCF_EXPORT ConnectedClientTransport :
public ClientTransport
46 ConnectedClientTransport(
const ConnectedClientTransport &rhs);
47 ConnectedClientTransport();
48 ~ConnectedClientTransport();
51 void setMaxSendSize(std::size_t maxSendSize);
52 std::size_t getMaxSendSize();
56 void read(
const ByteBuffer &byteBuffer_, std::size_t bytesRequested);
57 void write(
const std::vector<ByteBuffer> &byteBuffers);
59 void setTransportFilters(
const std::vector<FilterPtr> &filters);
60 void getTransportFilters(std::vector<FilterPtr> &filters);
62 void getWireFilters(std::vector<FilterPtr> & filters);
64 void connect(ClientTransportCallback &clientStub,
unsigned int timeoutMs);
65 void disconnect(
unsigned int timeoutMs);
69 void onReadCompleted(
const ByteBuffer &byteBuffer);
70 void onWriteCompleted(std::size_t bytes);
72 void getProgressInfo(RemoteCallProgressInfo & info);
74 friend class HttpServerTransport;
75 friend class AsioServerTransport;
76 friend class PublishingService;
77 void setWireFilters(
const std::vector<FilterPtr> & wireFilters);
81 std::size_t mMaxSendSize;
84 unsigned int mEndTimeMs;
86 std::vector<FilterPtr> mTransportFilters;
87 std::vector<FilterPtr> mWireFilters;
88 std::vector<ByteBuffer> mWriteBuffers;
89 std::vector<ByteBuffer> mSlicedByteBuffers;
90 ReallocBufferPtr mReadBufferPtr;
91 ReallocBufferPtr mReadBuffer2Ptr;
93 friend class ClientFilterProxy;
94 friend class ClientTcpFrame;
95 friend class ClientHttpFrame;
99 virtual std::size_t implRead(
100 const ByteBuffer &byteBuffer_,
101 std::size_t bytesRequested) = 0;
103 virtual std::size_t implReadAsync(
104 const ByteBuffer &byteBuffer_,
105 std::size_t bytesRequested) = 0;
107 virtual std::size_t implWrite(
108 const std::vector<ByteBuffer> &byteBuffers) = 0;
110 virtual std::size_t implWriteAsync(
111 const std::vector<ByteBuffer> &byteBuffers) = 0;
113 virtual void implConnect(
114 ClientTransportCallback &clientStub,
115 unsigned int timeoutMs) = 0;
117 virtual void implConnectAsync(
118 ClientTransportCallback &clientStub,
119 unsigned int timeoutMs) = 0;
121 virtual void implClose() = 0;
133 std::size_t mReadBufferPos;
134 std::size_t mWriteBufferPos;
135 bool mSendingZeroSizeChunk =
false;
137 ClientTransportCallback * mpClientStub;
139 ByteBuffer * mpClientStubReadBuffer;
140 ByteBuffer mReadBuffer;
141 std::size_t mBytesToRead;
142 std::size_t mBytesRequested;
143 ByteBuffer mReadBuffer2;
146 friend class Subscription;
147 OverlappedAmiPtr mOverlappedPtr;
149 MutexPtr mSocketOpsMutexPtr;
151 AsioBuffers mAsioBuffers;
155 typedef std::shared_ptr<Lock> LockPtr;
157 AsioDeadlineTimerPtr mAsioTimerPtr;
159 friend class TcpClientFilterProxy;
166 std::uint32_t timeoutMs,
167 ClientTransportCallback *pClientStub);
169 void onTimerExpired();
172 RecursionState<std::size_t, int> mRecursionState;
174 void fireProgressEvent();
179 void onTransitionCompleted(std::size_t bytesTransferred);
181 void onCompletion(
int bytesTransferred);
182 void onTimedRecvCompleted(
int ret,
int err);
183 void onTimedSendCompleted(
int ret,
int err);
184 void onConnectCompleted(
int err);
187 void onTransitionCompleted_(std::size_t bytesTransferred);
188 void issueRead(
const ByteBuffer &buffer, std::size_t bytesToRead);
189 void issueWrite(
const std::vector<ByteBuffer> &byteBuffers);
192 ClientTransportCallback &clientStub,
193 const std::vector<ByteBuffer> &data,
194 unsigned int timeoutMs);
197 ClientTransportCallback &clientStub,
198 ByteBuffer &byteBuffer,
199 unsigned int timeoutMs);
201 void setSocketOpsMutex(MutexPtr mutexPtr);
203 friend class OverlappedAmi;
209 #endif // ! INCLUDE_RCF_CONNECTIONORIENTEDCLIENTTRANSPORT_HPP Definition: AmiIoHandler.hpp:23