diff --git a/db/HGPdtToolDb/HGPdtToolDb.h b/db/HGPdtToolDb/HGPdtToolDb.h index cb2f524..9d01c0f 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.h +++ b/db/HGPdtToolDb/HGPdtToolDb.h @@ -7,10 +7,12 @@ /* 账户在其他地方登录 */ #define HGPDTTOOLDB_USEREVENT_CONFLICT 1L -/* 网络连接断开 */ -#define HGPDTTOOLDB_USEREVENT_DISCONNECT 2L +/* 网络错误 */ +#define HGPDTTOOLDB_USEREVENT_NETERROR 2L /* 被管理员账户强制下线 */ #define HGPDTTOOLDB_USEREVENT_REFUSE 3L +/* 数据库异常 */ +#define HGPDTTOOLDB_USEREVENT_DBERROR 4L /* 管理员账户 */ #define HGPDTTOOLDB_USERTYPE_ROOT 1L diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp index cd5cc83..f6c778b 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp @@ -998,18 +998,19 @@ void HGAPI HGPdtToolDbUserMgrImpl::ThreadFunc(HGThread thread, HGPointer param) { HGUInt event = 0; - int connectId; + int connectId = -1; std::string takeUserName; - bool ret = GetUserLoginInfo(p->m_sql, p->m_userName.c_str(), connectId, takeUserName); - if (!ret) + int ret = GetUserLoginInfo(p->m_sql, p->m_userName.c_str(), connectId, takeUserName); + if (0 != ret) { - event = HGPDTTOOLDB_USEREVENT_DISCONNECT; + int errNo = mysql_errno(p->m_sql); + event = (errNo >= 1158 && errNo <= 1161) ? HGPDTTOOLDB_USEREVENT_NETERROR : HGPDTTOOLDB_USEREVENT_DBERROR; } - else if (takeUserName == "root" && p->m_userName != takeUserName) + else if (takeUserName == "root" && takeUserName != p->m_userName) { event = HGPDTTOOLDB_USEREVENT_REFUSE; } - else if (connectId != p->m_connectId) + else if (connectId != -1 && connectId != p->m_connectId) { event = HGPDTTOOLDB_USEREVENT_CONFLICT; } @@ -1142,7 +1143,7 @@ bool HGPdtToolDbUserMgrImpl::SetUserLoginInfo(MYSQL* sql, const HGChar* userName return (0 == ret) ? true : false; } -bool HGPdtToolDbUserMgrImpl::GetUserLoginInfo(MYSQL* sql, const HGChar* userName, int& connectId, std::string& takeUserName) +int HGPdtToolDbUserMgrImpl::GetUserLoginInfo(MYSQL* sql, const HGChar* userName, int& connectId, std::string& takeUserName) { assert(NULL != sql); assert(NULL != userName && 0 != *userName); @@ -1154,7 +1155,7 @@ bool HGPdtToolDbUserMgrImpl::GetUserLoginInfo(MYSQL* sql, const HGChar* userName int ret = mysql_query(sql, sqlCmd); if (0 != ret) { - return false; + return ret; } MYSQL_RES* sqlRes = mysql_use_result(sql); @@ -1171,7 +1172,7 @@ bool HGPdtToolDbUserMgrImpl::GetUserLoginInfo(MYSQL* sql, const HGChar* userName mysql_free_result(sqlRes); } - return true; + return 0; } int HGPdtToolDbUserMgrImpl::CreateFileTable(MYSQL* sql) diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp index 66e2eda..dedf7fb 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp @@ -46,7 +46,7 @@ private: static std::string GetAuthString(MYSQL* sql, const HGChar* pwd); static int GetConnectId(MYSQL* sql); static bool SetUserLoginInfo(MYSQL* sql, const HGChar* userName, int connectId, const std::string& takeUserName); - static bool GetUserLoginInfo(MYSQL* sql, const HGChar* userName, int &connectId, std::string &takeUserName); + static int GetUserLoginInfo(MYSQL* sql, const HGChar* userName, int &connectId, std::string &takeUserName); int CreateFileTable(MYSQL* sql); int CreateMainTestTable(MYSQL *sql);