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);
60 void setTransportFilters(
const std::vector<FilterPtr> &filters);
61 void getTransportFilters(std::vector<FilterPtr> &filters);
63 void getWireFilters(std::vector<FilterPtr> & filters);
65 void connect(ClientTransportCallback &clientStub,
unsigned int timeoutMs);
66 void disconnect(
unsigned int timeoutMs);
70 void onReadCompleted(
const ByteBuffer &byteBuffer);
71 void onWriteCompleted(std::size_t bytes);
73 void getProgressInfo(RemoteCallProgressInfo & info);
75 friend class HttpServerTransport;
76 friend class AsioServerTransport;
77 friend class PublishingService;
78 void setWireFilters(
const std::vector<FilterPtr> & wireFilters);
82 std::size_t mMaxSendSize;
85 unsigned int mEndTimeMs;
87 std::vector<FilterPtr> mTransportFilters;
88 std::vector<FilterPtr> mWireFilters;
89 std::vector<ByteBuffer> mWriteBuffers;
90 std::vector<ByteBuffer> mSlicedByteBuffers;
91 ReallocBufferPtr mReadBufferPtr;
92 ReallocBufferPtr mReadBuffer2Ptr;
94 friend class ClientFilterProxy;
95 friend class ClientTcpFrame;
96 friend class ClientHttpFrame;
100 virtual std::size_t implRead(
101 const ByteBuffer &byteBuffer_,
102 std::size_t bytesRequested) = 0;
104 virtual std::size_t implReadAsync(
105 const ByteBuffer &byteBuffer_,
106 std::size_t bytesRequested) = 0;
108 virtual std::size_t implWrite(
109 const std::vector<ByteBuffer> &byteBuffers) = 0;
111 virtual std::size_t implWriteAsync(
112 const std::vector<ByteBuffer> &byteBuffers) = 0;
114 virtual void implConnect(
115 ClientTransportCallback &clientStub,
116 unsigned int timeoutMs) = 0;
118 virtual void implConnectAsync(
119 ClientTransportCallback &clientStub,
120 unsigned int timeoutMs) = 0;
122 virtual void implClose() = 0;
134 std::size_t mReadBufferPos;
135 std::size_t mWriteBufferPos;
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:24