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