⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketpool.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
字号:
#ifndef UTILS_BASE_SOCKETPOOL_H_#define UTILS_BASE_SOCKETPOOL_H_#include <deque>#include <vector>#include "logging.h"#include "sigslot.h"namespace utils_base {class AsyncSocket;class LoggingAdapter;class SocketAddress;class SocketFactory;class SocketStream;class StreamInterface;//////////////////////////////////////////////////////////////////////// StreamPool//////////////////////////////////////////////////////////////////////class StreamPool {public:  virtual ~StreamPool() { }  virtual StreamInterface* RequestConnectedStream(const SocketAddress& remote,                                                  int* err) = 0;  virtual void ReturnConnectedStream(StreamInterface* stream) = 0;};///////////////////////////////////////////////////////////////////////////////// StreamCache - Caches a set of open streams, defers creation/destruction to//  the supplied StreamPool.///////////////////////////////////////////////////////////////////////////////class StreamCache : public StreamPool, public sigslot::has_slots<> {public:  StreamCache(StreamPool* pool);  virtual ~StreamCache();  // StreamPool Interface  virtual StreamInterface* RequestConnectedStream(const SocketAddress& remote,                                                  int* err);  virtual void ReturnConnectedStream(StreamInterface* stream);private:  typedef std::pair<SocketAddress, StreamInterface*> ConnectedStream;  typedef std::list<ConnectedStream> ConnectedList;  void OnStreamEvent(StreamInterface* stream, int events, int err);  // We delegate stream creation and deletion to this pool.  StreamPool* pool_;  // Streams that are in use (returned from RequestConnectedStream).  ConnectedList active_;  // Streams which were returned to us, but are still open.  ConnectedList cached_;};//////////////////////////////////////////////////////////////////////// NewSocketPool /////////////////////// Creates a new PTcpSocket every time//////////////////////////////////////////////////////////////////////class NewSocketPool : public StreamPool {public:  NewSocketPool(SocketFactory* factory);  virtual ~NewSocketPool();    // StreamPool Interface  virtual StreamInterface* RequestConnectedStream(const SocketAddress& remote,                                                  int* err);  virtual void ReturnConnectedStream(StreamInterface* stream);  private:  SocketFactory* factory_;  std::vector<StreamInterface*> used_;};//////////////////////////////////////////////////////////////////////// ReuseSocketPool ///////////////////////// Pass a PTcpSocket chain to the constructor, and if the connection// is still open, it will be reused.//////////////////////////////////////////////////////////////////////class ReuseSocketPool : public StreamPool {public:  ReuseSocketPool(SocketFactory* factory, AsyncSocket* socket = 0);  virtual ~ReuseSocketPool();  void setSocket(AsyncSocket* socket);  // StreamPool Interface  virtual StreamInterface* RequestConnectedStream(const SocketAddress& remote,                                                  int* err);  virtual void ReturnConnectedStream(StreamInterface* stream);  private:  SocketFactory* factory_;  SocketStream* stream_;};///////////////////////////////////////////////////////////////////////////////// LoggingPoolAdapter - Adapts a StreamPool to supply streams with attached// LoggingAdapters.///////////////////////////////////////////////////////////////////////////////class LoggingPoolAdapter : public StreamPool {public:  LoggingPoolAdapter(StreamPool* pool, LoggingSeverity level,                     const std::string& label, bool binary_mode);  virtual ~LoggingPoolAdapter();  // StreamPool Interface  virtual StreamInterface* RequestConnectedStream(const SocketAddress& remote,                                                  int* err);  virtual void ReturnConnectedStream(StreamInterface* stream);private:  StreamPool* pool_;  LoggingSeverity level_;  std::string label_;  bool binary_mode_;  typedef std::deque<LoggingAdapter*> StreamList;  StreamList recycle_bin_;};//////////////////////////////////////////////////////////////////////} // namespace utils_base#endif // UTILS_BASE_SOCKETPOOL_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -