8 #ifndef SRC_IO_USOCK_SERVER_H_
9 #define SRC_IO_USOCK_SERVER_H_
15 #include <boost/array.hpp>
16 #include <boost/bind.hpp>
17 #include <boost/enable_shared_from_this.hpp>
18 #include <boost/shared_ptr.hpp>
19 #include <boost/asio.hpp>
20 #include <boost/function.hpp>
22 #if defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
24 class UnixDomainSocketSession :
25 public boost::enable_shared_from_this<UnixDomainSocketSession> {
27 static const int kPDULen = 4096;
28 static const int kPDUHeaderLen = 4;
29 static const int kPDUDataLen = 4092;
37 typedef boost::function <void (UnixDomainSocketSession *, Event)>
40 explicit UnixDomainSocketSession(boost::asio::io_context *io_service)
41 : socket_(*io_service), session_id_(0) {
44 ~UnixDomainSocketSession();
46 boost::asio::local::stream_protocol::socket &socket() {
50 void set_observer(EventObserver observer) { observer_ = observer; }
51 uint64_t session_id() {
return session_id_; }
52 void set_session_id(uint64_t
id) { session_id_ = id; }
54 void Send(
const uint8_t * data,
int data_len);
57 typedef std::list <boost::asio::mutable_buffer> BufferQueue;
60 void AppendBuffer(
const uint8_t * data,
int len);
61 void DeleteBuffer(boost::asio::mutable_buffer);
62 void HandleRead(
const boost::system::error_code & error,
size_t bytes);
63 void HandleWrite(
const boost::system::error_code & error);
65 boost::asio::local::stream_protocol::socket socket_;
66 BufferQueue buffer_queue_;
67 uint8_t data_[kPDULen];
68 EventObserver observer_;
72 typedef boost::shared_ptr <UnixDomainSocketSession> SessionPtr;
74 class UnixDomainSocketServer {
82 typedef boost::function <void (UnixDomainSocketServer *,
83 UnixDomainSocketSession *,
Event) >
86 UnixDomainSocketServer(boost::asio::io_context *io_service,
87 const std::string &file);
89 void HandleAccept(SessionPtr new_session,
90 const boost::system::error_code &error);
92 void set_observer(EventObserver observer) { observer_ = observer; }
95 boost::asio::io_context *io_service_;
96 EventObserver observer_;
97 boost::asio::local::stream_protocol::acceptor acceptor_;
98 uint64_t session_idspace_;
101 #else // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
102 #error Local sockets not available on this platform.
103 #endif // defined(BOOST_ASIO_HAS_LOCAL_SOCKETS)
105 #endif // SRC_IO_USOCK_SERVER_H_