diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/UserBackendMysql/UserBackendMysql.cpp | 46 | ||||
-rw-r--r-- | src/modules/UserBackendMysql/UserBackendMysql.h | 8 |
2 files changed, 26 insertions, 28 deletions
diff --git a/src/modules/UserBackendMysql/UserBackendMysql.cpp b/src/modules/UserBackendMysql/UserBackendMysql.cpp index ebea4dc..a8751ee 100644 --- a/src/modules/UserBackendMysql/UserBackendMysql.cpp +++ b/src/modules/UserBackendMysql/UserBackendMysql.cpp @@ -34,7 +34,7 @@ namespace Mad { namespace Modules { -UserBackendMysql *UserBackendMysql::backend; +boost::shared_ptr<UserBackendMysql> UserBackendMysql::backend; bool UserBackendMysql::handleConfigEntry(const Common::ConfigEntry &entry, bool handled) { if(handled) @@ -132,16 +132,18 @@ void UserBackendMysql::configFinished() { } -bool UserBackendMysql::getUserList(const boost::function1<void, const std::map<unsigned long, Common::UserInfo>& > &callback) { +boost::shared_ptr<std::map<unsigned long, Common::UserInfo> > UserBackendMysql::getUserList() { + Net::ThreadManager::get()->detach(); + mysql_ping(mysql); mysql_real_query(mysql, queryListUsers.c_str(), queryListUsers.length()); MYSQL_RES *result = mysql_use_result(mysql); if(mysql_num_fields(result) < 4) - return true; // TODO Error + return boost::shared_ptr<std::map<unsigned long, Common::UserInfo> >(); // TODO Error - std::map<unsigned long, Common::UserInfo> users; + boost::shared_ptr<std::map<unsigned long, Common::UserInfo> > users(new std::map<unsigned long, Common::UserInfo>()); while(MYSQL_ROW row = mysql_fetch_row(result)) { Common::UserInfo user(strtoul(row[0], 0, 10), row[2]); @@ -149,15 +151,15 @@ bool UserBackendMysql::getUserList(const boost::function1<void, const std::map<u user.setGid(strtoul(row[1], 0, 10)); user.setFullName(row[3]); - users.insert(std::make_pair(user.getUid(), user)); + users->insert(std::make_pair(user.getUid(), user)); } - Net::ThreadManager::get()->pushWork(boost::bind(callback, users)); - - return true; + return users; } -bool UserBackendMysql::getUserInfo(unsigned long uid, const boost::function1<void, const Common::UserInfo&> &callback) { +boost::shared_ptr<Common::UserInfo> UserBackendMysql::getUserInfo(unsigned long uid) { + Net::ThreadManager::get()->detach(); + mysql_ping(mysql); std::string query = queryUserById; @@ -173,25 +175,22 @@ bool UserBackendMysql::getUserInfo(unsigned long uid, const boost::function1<voi MYSQL_RES *result = mysql_use_result(mysql); if(mysql_num_fields(result) < 4) - return true; // TODO Error + return boost::shared_ptr<Common::UserInfo>(); // TODO Error MYSQL_ROW row = mysql_fetch_row(result); if(row) { - Common::UserInfo user(strtoul(row[0], 0, 10), row[2]); + boost::shared_ptr<Common::UserInfo> user(new Common::UserInfo(strtoul(row[0], 0, 10), row[2])); - user.setGid(strtoul(row[1], 0, 10)); - user.setFullName(row[3]); - - Net::ThreadManager::get()->pushWork(boost::bind(callback, user)); + user->setGid(strtoul(row[1], 0, 10)); + user->setFullName(row[3]); while((row = mysql_fetch_row(result)) != 0) {} - } - else { - Net::ThreadManager::get()->pushWork(boost::bind(callback, Common::UserInfo())); + + return user; } - return true; + return boost::shared_ptr<Common::UserInfo>(); } @@ -199,19 +198,18 @@ void UserBackendMysql::registerBackend() { if(backend) return; - backend = new UserBackendMysql(); - Common::ConfigManager::get()->registerConfigurable(backend); + backend.reset(new UserBackendMysql()); + Common::ConfigManager::get()->registerConfigurable(backend.get()); } void UserBackendMysql::unregisterBackend() { if(!backend) return; - Common::ConfigManager::get()->unregisterConfigurable(backend); + Common::ConfigManager::get()->unregisterConfigurable(backend.get()); Server::UserManager::get()->unregisterBackend(backend); - delete backend; - backend = 0; + backend.reset(); } } diff --git a/src/modules/UserBackendMysql/UserBackendMysql.h b/src/modules/UserBackendMysql/UserBackendMysql.h index 2e4f1ff..de28069 100644 --- a/src/modules/UserBackendMysql/UserBackendMysql.h +++ b/src/modules/UserBackendMysql/UserBackendMysql.h @@ -30,9 +30,9 @@ namespace Mad { namespace Modules { -class UserBackendMysql : private Server::UserBackend, private Common::Configurable { +class UserBackendMysql : public Server::UserBackend, private Common::Configurable { private: - static UserBackendMysql *backend; + static boost::shared_ptr<UserBackendMysql> backend; std::string host, username, passwd, db, unixSocket; uint16_t port; @@ -50,8 +50,8 @@ class UserBackendMysql : private Server::UserBackend, private Common::Configurab virtual bool handleConfigEntry(const Common::ConfigEntry &entry, bool); virtual void configFinished(); - virtual bool getUserList(const boost::function1<void, const std::map<unsigned long, Common::UserInfo>& > &callback); - virtual bool getUserInfo(unsigned long uid, const boost::function1<void, const Common::UserInfo&> &callback); + virtual boost::shared_ptr<std::map<unsigned long, Common::UserInfo> > getUserList(); + virtual boost::shared_ptr<Common::UserInfo> getUserInfo(unsigned long uid); public: virtual ~UserBackendMysql() { |