]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/beast/example/websocket/server/chat-multi/shared_state.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / beast / example / websocket / server / chat-multi / shared_state.hpp
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/vinniefalco/CppCon2018
8 //
9
10 #ifndef BOOST_BEAST_EXAMPLE_WEBSOCKET_CHAT_MULTI_SHARED_STATE_HPP
11 #define BOOST_BEAST_EXAMPLE_WEBSOCKET_CHAT_MULTI_SHARED_STATE_HPP
12
13 #include <boost/smart_ptr.hpp>
14 #include <memory>
15 #include <mutex>
16 #include <string>
17 #include <unordered_set>
18
19 // Forward declaration
20 class websocket_session;
21
22 // Represents the shared server state
23 class shared_state
24 {
25 std::string const doc_root_;
26
27 // This mutex synchronizes all access to sessions_
28 std::mutex mutex_;
29
30 // Keep a list of all the connected clients
31 std::unordered_set<websocket_session*> sessions_;
32
33 public:
34 explicit
35 shared_state(std::string doc_root);
36
37 std::string const&
38 doc_root() const noexcept
39 {
40 return doc_root_;
41 }
42
43 void join (websocket_session* session);
44 void leave (websocket_session* session);
45 void send (std::string message);
46 };
47
48 #endif