// // Copyright (c) 2016-2019 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/boostorg/beast // #ifndef BOOST_BEAST_WEBSOCKET_DETAIL_SERVICE_HPP #define BOOST_BEAST_WEBSOCKET_DETAIL_SERVICE_HPP #include #include #include #include #include namespace boost { namespace beast { namespace websocket { namespace detail { class service : public beast::detail::service_base { public: class impl_type : public boost::enable_shared_from_this { service& svc_; std::size_t index_; friend class service; public: virtual ~impl_type() = default; BOOST_BEAST_DECL explicit impl_type(net::execution_context& ctx); BOOST_BEAST_DECL void remove(); virtual void shutdown() = 0; }; private: std::mutex m_; std::vector v_; BOOST_BEAST_DECL void shutdown() override; public: BOOST_BEAST_DECL explicit service(net::execution_context& ctx) : beast::detail::service_base(ctx) { } }; } // detail } // websocket } // beast } // boost #if BOOST_BEAST_HEADER_ONLY #include #endif #endif