// // Copyright (c) 2018 Vinnie Falco (vinnie dot falco at gmail dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // Official repository: https://github.com/vinniefalco/CppCon2018 // #ifndef CPPCON2018_WEBSOCKET_SESSION_HPP #define CPPCON2018_WEBSOCKET_SESSION_HPP #include "net.hpp" #include "beast.hpp" #include "shared_state.hpp" #include #include #include #include // Forward declaration class shared_state; /** Represents an active WebSocket connection to the server */ class websocket_session : public std::enable_shared_from_this { beast::flat_buffer buffer_; websocket::stream ws_; std::shared_ptr state_; std::vector> queue_; void fail(error_code ec, char const* what); void on_accept(error_code ec); void on_read(error_code ec, std::size_t bytes_transferred); void on_write(error_code ec, std::size_t bytes_transferred); public: websocket_session( tcp::socket socket, std::shared_ptr const& state); ~websocket_session(); template void run(http::request> req); // Send a message void send(std::shared_ptr const& ss); }; template void websocket_session:: run(http::request> req) { // Accept the websocket handshake ws_.async_accept( req, std::bind( &websocket_session::on_accept, shared_from_this(), std::placeholders::_1)); } #endif