multi user chat by boost beast
Table of Contents
overview
@startuml
main -> io_context: construct
main -> shared_state: construct
main -> listener: construct
main -> listener : run
@enduml
classes
@startuml
class http_session
{
beast::tcp_stream stream_;
beast::flat_buffer buffer_;
boost::shared_ptr state_;
boost::optional> parser_;
struct send_lambda;
void fail(beast::error_code ec, char const* what);
void do_read();
void on_read(beast::error_code ec, std::size_t);
void on_write(beast::error_code ec, std::size_t, bool close);
void run();
}
class websocket_session
{
beast::flat_buffer buffer_;
websocket::stream ws_;
boost::shared_ptr state_;
std::vector> queue_;
void fail(beast::error_code ec, char const* what);
void on_accept(beast::error_code ec);
void on_read(beast::error_code ec, std::size_t bytes_transferred);
void on_write(beast::error_code ec, std::size_t bytes_transferred);
void run(http::request> req);
void send(boost::shared_ptr const& ss);
void on_send(boost::shared_ptr const& ss);
}
class shared_state
{
std::string const doc_root_;
std::mutex mutex_;
std::unordered_set sessions_;
void join (websocket_session* session);
void leave (websocket_session* session);
void send (std::string message);
}
class listener
{
net::io_context& ioc_;
tcp::acceptor acceptor_;
boost::shared_ptr state_;
void fail(beast::error_code ec, char const* what);
void on_accept(beast::error_code ec, tcp::socket socket);
void run();
}
shared_state o-- websocket_session
listener <-- shared_state
http_session <-- shared_state
websocket_session <-- shared_state
@enduml
``
Comments |0|
Category: Uncategorized