19 #ifndef INCLUDE_RCF_SERVERTRANSPORT_HPP
20 #define INCLUDE_RCF_SERVERTRANSPORT_HPP
27 #include <boost/enable_shared_from_this.hpp>
28 #include <boost/shared_ptr.hpp>
30 #include <RCF/ByteBuffer.hpp>
31 #include <RCF/Enums.hpp>
32 #include <RCF/Export.hpp>
33 #include <RCF/Filter.hpp>
34 #include <RCF/ThreadLibrary.hpp>
40 class ClientTransport;
45 typedef boost::shared_ptr<Filter> FilterPtr;
46 typedef std::auto_ptr<ClientTransport> ClientTransportAutoPtr;
47 typedef boost::shared_ptr<StubEntry> StubEntryPtr;
49 class ServerTransport;
50 typedef boost::shared_ptr<ServerTransport> ServerTransportPtr;
51 typedef std::auto_ptr<ServerTransport> ServerTransportAutoPtr;
53 typedef boost::shared_ptr<RcfSession> RcfSessionPtr;
58 virtual ~RemoteAddress()
61 virtual std::string string()
const
67 class NoRemoteAddress :
public RemoteAddress
70 class SessionState :
public boost::enable_shared_from_this<SessionState>
75 virtual ~SessionState();
77 virtual void postRead() = 0;
78 virtual ByteBuffer getReadByteBuffer() = 0;
79 virtual void postWrite(std::vector<ByteBuffer> &byteBuffers) = 0;
80 virtual void postClose() = 0;
82 virtual ServerTransport &
83 getServerTransport() = 0;
85 virtual const RemoteAddress &
86 getRemoteAddress() = 0;
88 virtual bool isConnected() = 0;
91 virtual void setTransportFilters(
const std::vector<FilterPtr> &filters) = 0;
92 virtual void getTransportFilters(std::vector<FilterPtr> &filters) = 0;
93 void setEnableReconnect(
bool enableReconnect);
94 bool getEnableReconnect();
96 boost::uint64_t getTotalBytesReceived()
const;
97 boost::uint64_t getTotalBytesSent()
const;
99 RcfSessionPtr getSessionPtr()
const;
102 bool mEnableReconnect;
103 boost::uint64_t mBytesReceivedCounter;
104 boost::uint64_t mBytesSentCounter;
106 RcfSessionPtr mSessionPtr;
110 typedef boost::shared_ptr<SessionState> SessionStatePtr;
111 typedef boost::weak_ptr<SessionState> SessionStateWeakPtr;
114 typedef boost::shared_ptr<RcfSession> RcfSessionPtr;
116 typedef RcfSession I_Session;
117 typedef RcfSessionPtr SessionPtr;
120 typedef boost::shared_ptr<ThreadPool> ThreadPoolPtr;
136 virtual ServerTransportPtr
141 std::size_t getMaxMessageLength()
const;
146 virtual TransportType getTransportType() = 0;
150 ServerTransport & setMaxIncomingMessageLength(std::size_t maxMessageLength);
153 std::size_t getMaxIncomingMessageLength()
const;
159 std::size_t getConnectionLimit()
const;
162 ServerTransport & setInitialNumberOfConnections(std::size_t initialNumberOfConnections);
165 std::size_t getInitialNumberOfConnections()
const;
173 ServerTransport & setSupportedProtocols(
const std::vector<TransportProtocol> & protocols);
176 const std::vector<TransportProtocol> & getSupportedProtocols()
const;
180 void setRpcProtocol(RpcProtocol rpcProtocol);
181 RpcProtocol getRpcProtocol()
const;
186 RpcProtocol mRpcProtocol;
191 mutable ReadWriteMutex mReadWriteMutex;
192 std::size_t mMaxMessageLength;
193 std::size_t mConnectionLimit;
194 std::size_t mInitialNumberOfConnections;
196 std::vector<TransportProtocol> mSupportedProtocols;
200 Mutex mSessionsMutex;
201 std::set<SessionStateWeakPtr> mSessions;
205 template<
typename Iter>
206 void enumerateSessions(
const Iter & iter)
208 Lock lock(mSessionsMutex);
209 std::copy(mSessions.begin(), mSessions.end(), iter);
214 class ServerTransportEx
218 virtual ~ServerTransportEx() {}
220 virtual ClientTransportAutoPtr
221 createClientTransport(
222 const Endpoint &endpoint) = 0;
226 ClientTransportAutoPtr & clientTransportAutoPtr,
227 StubEntryPtr stubEntryPtr,
228 bool keepClientConnection) = 0;
230 virtual ClientTransportAutoPtr
231 createClientTransport(
232 SessionPtr sessionPtr) = 0;
236 const SessionPtr &sessionPtr1,
237 const SessionPtr &sessionPtr2) = 0;
240 RCF_EXPORT std::size_t getDefaultMaxMessageLength();
242 RCF_EXPORT
void setDefaultMaxMessageLength(
243 std::size_t maxMessageLength);
247 #endif // ! INCLUDE_RCF_SERVERTRANSPORT_HPP