#pragma once #include #include #include #include #include #include class DatabaseManager { public: static DatabaseManager &GetInstance(); bool Init(boost::asio::io_context &io_context, const std::string &host, uint16_t port, const std::string &user, const std::string &password, const std::string &db); struct UserData { std::string nickname; uint64_t gold; uint32_t swordLevel; }; boost::asio::awaitable LoadUser(std::string nickname); boost::asio::awaitable SaveUser(std::string nickname, uint64_t gold, uint32_t swordLevel); private: DatabaseManager() = default; // 비동기 Mutex 역할을 할 함수들 boost::asio::awaitable Lock(); void Unlock(); std::unique_ptr conn_; std::unique_ptr> strand_; // 비동기 락 시스템을 위한 상태 변수 bool is_locked_ = false; std::queue> waiting_queue_; };