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 RCF_EXPORT NetworkSession :
public boost::enable_shared_from_this<NetworkSession>
75 virtual ~NetworkSession();
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;
101 boost::uint32_t getLastActivityTimestamp()
const;
102 void setLastActivityTimestamp();
105 bool mEnableReconnect;
106 boost::uint64_t mBytesReceivedCounter;
107 boost::uint64_t mBytesSentCounter;
108 boost::uint32_t mLastActivityTimestampMs;
110 RcfSessionPtr mRcfSessionPtr;
114 typedef boost::shared_ptr<NetworkSession> NetworkSessionPtr;
115 typedef boost::weak_ptr<NetworkSession> NetworkSessionWeakPtr;
118 typedef boost::shared_ptr<RcfSession> RcfSessionPtr;
120 typedef RcfSession I_Session;
121 typedef RcfSessionPtr SessionPtr;
124 typedef boost::shared_ptr<ThreadPool> ThreadPoolPtr;
140 virtual ServerTransportPtr
145 std::size_t getMaxMessageLength()
const;
150 virtual TransportType getTransportType() = 0;
154 ServerTransport & setMaxIncomingMessageLength(std::size_t maxMessageLength);
157 std::size_t getMaxIncomingMessageLength()
const;
163 std::size_t getConnectionLimit()
const;
166 ServerTransport & setInitialNumberOfConnections(std::size_t initialNumberOfConnections);
169 std::size_t getInitialNumberOfConnections()
const;
177 ServerTransport & setSupportedProtocols(
const std::vector<TransportProtocol> & protocols);
180 const std::vector<TransportProtocol> & getSupportedProtocols()
const;
184 void setRpcProtocol(RpcProtocol rpcProtocol);
185 RpcProtocol getRpcProtocol()
const;
190 RpcProtocol mRpcProtocol;
195 mutable ReadWriteMutex mReadWriteMutex;
196 std::size_t mMaxMessageLength;
197 std::size_t mConnectionLimit;
198 std::size_t mInitialNumberOfConnections;
200 std::vector<TransportProtocol> mSupportedProtocols;
204 Mutex mSessionsMutex;
205 std::set<NetworkSessionWeakPtr> mSessions;
209 template<
typename Iter>
210 void enumerateSessions(
const Iter & iter)
212 Lock lock(mSessionsMutex);
213 std::copy(mSessions.begin(), mSessions.end(), iter);
218 class ServerTransportEx
222 virtual ~ServerTransportEx() {}
224 virtual ClientTransportAutoPtr
225 createClientTransport(
226 const Endpoint &endpoint) = 0;
230 ClientTransportAutoPtr & clientTransportAutoPtr,
231 StubEntryPtr stubEntryPtr,
232 bool keepClientConnection) = 0;
234 virtual ClientTransportAutoPtr
235 createClientTransport(
236 SessionPtr sessionPtr) = 0;
240 RCF_EXPORT std::size_t getDefaultMaxMessageLength();
242 RCF_EXPORT
void setDefaultMaxMessageLength(
243 std::size_t maxMessageLength);
247 #endif // ! INCLUDE_RCF_SERVERTRANSPORT_HPP