diff options
author | Roland Reichwein <mail@reichwein.it> | 2023-02-26 08:54:17 +0100 |
---|---|---|
committer | Roland Reichwein <mail@reichwein.it> | 2023-02-26 08:54:17 +0100 |
commit | c9fa963e71258c5adfb71cf1996cd1bcb33df0bb (patch) | |
tree | a40d2260bf03ea5adfca798aef5d49d6a1984cad /connectionregistry.h |
Start with copy of whiteboard
Diffstat (limited to 'connectionregistry.h')
-rw-r--r-- | connectionregistry.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/connectionregistry.h b/connectionregistry.h new file mode 100644 index 0000000..c3c6884 --- /dev/null +++ b/connectionregistry.h @@ -0,0 +1,55 @@ +#pragma once + +#include <algorithm> +#include <memory> +#include <unordered_map> +#include <unordered_set> + +#include <boost/asio/ip/tcp.hpp> +#include <boost/beast/websocket.hpp> + +class ConnectionRegistry +{ +public: + using connection = std::shared_ptr<boost::beast::websocket::stream<boost::asio::ip::tcp::socket>>; + + ConnectionRegistry() = default; + ~ConnectionRegistry() = default; + + void setId(connection c, const std::string& id); + + // used via RegistryGuard + void addConnection(connection c); + void delConnection(connection c); + + // iterate over all connections associated with a certain id + std::unordered_set<connection>::iterator begin(const std::string& id); + std::unordered_set<connection>::iterator end(const std::string& id); + + // iterate over all connections + std::unordered_map<connection, std::string>::iterator begin(); + std::unordered_map<connection, std::string>::iterator end(); + + void dump() const; + + size_t number_of_connections() const; + +private: + // map connection to id + std::unordered_map<connection, std::string> m_connections; + // map id to list of related connections, used for iteration over connections to notify about changes + std::unordered_map<std::string, std::unordered_set<connection>> m_ids; + +public: + class RegistryGuard + { + public: + RegistryGuard(ConnectionRegistry& registry, connection c); + ~RegistryGuard(); + private: + ConnectionRegistry& m_registry; + connection m_connection; + }; + +}; + |