#pragma once #include #include #include #include #include #include "diff.h" #include "config.h" #include "connectionregistry.h" #include "storage.h" class Whiteboard { public: Whiteboard(); int run(int argc, char* argv[]); private: std::unique_ptr m_config; std::unique_ptr m_storage; std::mutex m_storage_mutex; std::mutex m_websocket_mutex; ConnectionRegistry m_registry; using connection = std::shared_ptr>; std::string handle_request(connection& c, const std::string& request); void notify_other_connections_diff(connection& c, const std::string& id, const Diff& diff); // notify all other id-related connections about changes void notify_other_connections_pos(connection& c, const std::string& id); // notify all other id-related connections about changes void do_session(boost::asio::ip::tcp::socket socket); void storage_cleanup(); };