#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; uint32_t maxSwordLevel; }; struct RankingResult { struct Entry { uint32_t rank; std::string nickname; uint64_t value; }; std::vector topEntries; int32_t myRank; uint64_t myValue; }; boost::asio::awaitable LoadUser(std::string nickname); boost::asio::awaitable SaveUser(std::string nickname, uint64_t gold, uint32_t swordLevel); boost::asio::awaitable GetRanking(int type, std::string nickname); 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_; };