diff --git a/db/HGPdtToolDb/HGPdtToolDb.cpp b/db/HGPdtToolDb/HGPdtToolDb.cpp index c3e0290..8482667 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.cpp +++ b/db/HGPdtToolDb/HGPdtToolDb.cpp @@ -2,8 +2,8 @@ #include "HGPdtToolDbImpl.hpp" #include "base/HGInc.h" -HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd, - HGPdtToolDbUserEventFunc func, HGPointer param, HGPdtToolDbUserMgr* userMgr) +HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port, const HGChar* userName, + const HGChar* pwd, HGPdtToolDbUserMgr* userMgr) { if (NULL == userMgr) { @@ -11,7 +11,7 @@ HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port, cons } HGPdtToolDbUserMgrImpl* userMgrImpl = new HGPdtToolDbUserMgrImpl; - HGResult ret = userMgrImpl->Create(host, port, userName, pwd, func, param); + HGResult ret = userMgrImpl->Create(host, port, userName, pwd); if (HGBASE_ERR_OK != ret) { delete userMgrImpl; @@ -40,6 +40,17 @@ HGResult HGAPI HGPdtToolDb_DestroyUserMgr(HGPdtToolDbUserMgr userMgr) return HGBASE_ERR_OK; } +HGResult HGAPI HGPdtToolDb_GetUserStatus(HGPdtToolDbUserMgr userMgr, HGUInt* userStatus) +{ + if (NULL == userMgr) + { + return HGBASE_ERR_INVALIDARG; + } + + HGPdtToolDbUserMgrImpl* userMgrImpl = (HGPdtToolDbUserMgrImpl*)userMgr; + return userMgrImpl->GetUserStatus(userStatus); +} + HGResult HGAPI HGPdtToolDb_GetUserType(HGPdtToolDbUserMgr userMgr, HGUInt* userType) { if (NULL == userMgr) diff --git a/db/HGPdtToolDb/HGPdtToolDb.def b/db/HGPdtToolDb/HGPdtToolDb.def index c3ce63e..b9a2dfa 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.def +++ b/db/HGPdtToolDb/HGPdtToolDb.def @@ -4,6 +4,7 @@ EXPORTS HGPdtToolDb_CreateUserMgr HGPdtToolDb_DestroyUserMgr +HGPdtToolDb_GetUserStatus HGPdtToolDb_GetUserType HGPdtToolDb_GetUserName HGPdtToolDb_RefuseUser diff --git a/db/HGPdtToolDb/HGPdtToolDb.h b/db/HGPdtToolDb/HGPdtToolDb.h index e6378f4..3f19a0f 100644 --- a/db/HGPdtToolDb/HGPdtToolDb.h +++ b/db/HGPdtToolDb/HGPdtToolDb.h @@ -5,12 +5,14 @@ #include "base/HGBaseErr.h" #include "HGPdtToolDbErr.h" +/* 状态正常 */ +#define HGPDTTOOLDB_USERSTATUS_OK 0L /* 账户在其他地方登录 */ -#define HGPDTTOOLDB_USEREVENT_CONFLICT 1L +#define HGPDTTOOLDB_USERSTATUS_CONFLICT 1L /* 被管理员账户强制下线 */ -#define HGPDTTOOLDB_USEREVENT_REFUSE 2L +#define HGPDTTOOLDB_USERSTATUS_REFUSE 2L /* 数据库异常 */ -#define HGPDTTOOLDB_USEREVENT_DBERROR 3L +#define HGPDTTOOLDB_USERSTATUS_DBERROR 3L /* 管理员账户 */ #define HGPDTTOOLDB_USERTYPE_ROOT 1L @@ -102,16 +104,16 @@ HG_DECLARE_HANDLE(HGPdtToolDbUserMgr); HG_DECLARE_HANDLE(HGPdtToolDbDevice); -/* 用户事件 */ -typedef void (HGAPI* HGPdtToolDbUserEventFunc)(HGPdtToolDbUserMgr userMgr, HGUInt event, HGPointer param); - /* 登录 */ -HGEXPORT HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar *host, HGUShort port, const HGChar *userName, const HGChar *pwd, - HGPdtToolDbUserEventFunc func, HGPointer param, HGPdtToolDbUserMgr *userMgr); +HGEXPORT HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar *host, HGUShort port, const HGChar *userName, + const HGChar *pwd, HGPdtToolDbUserMgr *userMgr); /* 登出 */ HGEXPORT HGResult HGAPI HGPdtToolDb_DestroyUserMgr(HGPdtToolDbUserMgr userMgr); +/* 获取用户状态 */ +HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserStatus(HGPdtToolDbUserMgr userMgr, HGUInt* userStatus); + /* 获取当前账户类型 */ HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserType(HGPdtToolDbUserMgr userMgr, HGUInt *userType); diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp index 7ce2c7f..59e28e0 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp @@ -104,15 +104,6 @@ HGPdtToolDbUserMgrImpl::HGPdtToolDbUserMgrImpl() m_sql = NULL; m_userName.clear(); m_connectId = -1; - m_func = NULL; - m_param = NULL; - m_valid = HGFALSE; - - m_lock = NULL; - m_event = NULL; - m_stopThread = HGFALSE; - m_thread = NULL; - m_deviceList.clear(); } @@ -121,8 +112,7 @@ HGPdtToolDbUserMgrImpl::~HGPdtToolDbUserMgrImpl() } -HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd, - HGPdtToolDbUserEventFunc func, HGPointer param) +HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd) { if (NULL != m_sql) { @@ -188,14 +178,6 @@ HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const m_sql = sql; m_userName = userName; m_connectId = connectId; - m_func = func; - m_param = param; - m_valid = HGTRUE; - - HGBase_CreateLock(&m_lock); - HGBase_CreateEvent(HGTRUE, HGFALSE, &m_event); - m_stopThread = HGFALSE; - HGBase_OpenThread(ThreadFunc, this, &m_thread); return HGBASE_ERR_OK; } @@ -206,29 +188,47 @@ HGResult HGPdtToolDbUserMgrImpl::Destroy() return HGBASE_ERR_FAIL; } - std::list::iterator iter; - for (iter = m_deviceList.begin(); iter != m_deviceList.end(); ++iter) + while (!m_deviceList.empty()) { - delete (*iter); + delete (*m_deviceList.begin()); } - m_deviceList.clear(); - - m_stopThread = HGTRUE; - HGBase_SetEvent(m_event); - HGBase_CloseThread(m_thread); - m_thread = NULL; - HGBase_DestroyEvent(m_event); - m_event = NULL; - HGBase_DestroyLock(m_lock); - m_lock = NULL; mysql_close(m_sql); m_sql = NULL; m_userName.clear(); m_connectId = -1; - m_func = NULL; - m_param = NULL; - m_valid = HGFALSE; + return HGBASE_ERR_OK; +} + +HGResult HGPdtToolDbUserMgrImpl::GetUserStatus(HGUInt* userStatus) +{ + if (NULL == m_sql) + { + return HGBASE_ERR_FAIL; + } + + if (NULL == userStatus) + { + return HGBASE_ERR_INVALIDARG; + } + + *userStatus = HGPDTTOOLDB_USERSTATUS_OK; + int connectId = -1; + std::string takeUserName; + int ret = GetUserLoginInfo(m_sql, m_userName.c_str(), connectId, takeUserName); + if (0 != ret) + { + *userStatus = HGPDTTOOLDB_USERSTATUS_DBERROR; + } + else if (takeUserName == "root" && takeUserName != m_userName) + { + *userStatus = HGPDTTOOLDB_USERSTATUS_REFUSE; + } + else if (connectId != -1 && connectId != m_connectId) + { + *userStatus = HGPDTTOOLDB_USERSTATUS_CONFLICT; + } + return HGBASE_ERR_OK; } @@ -273,10 +273,7 @@ HGResult HGPdtToolDbUserMgrImpl::GetUserName(HGChar* userName, HGUInt maxLen) HGResult HGPdtToolDbUserMgrImpl::RefuseUser(HGChar* userName) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -308,10 +305,7 @@ HGResult HGPdtToolDbUserMgrImpl::RefuseUser(HGChar* userName) HGResult HGPdtToolDbUserMgrImpl::GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt* count) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -379,10 +373,7 @@ HGResult HGPdtToolDbUserMgrImpl::ReleaseUserList(HGChar** userNameList, HGUInt c HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar* defPwd) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -436,10 +427,7 @@ HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -493,10 +481,7 @@ HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName) HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGChar* pwd) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -521,10 +506,7 @@ HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGCha HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -552,10 +534,7 @@ HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGCh HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fileName) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -653,10 +632,7 @@ HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fil HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* fileName) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -724,10 +700,7 @@ HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* f HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -872,10 +845,7 @@ HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath) HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGUInt maxLen) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -926,10 +896,7 @@ HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGU HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* value) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -961,10 +928,7 @@ HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* valu HGResult HGPdtToolDbUserMgrImpl::OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl** deviceImpl) { - HGBase_EnterLock(m_lock); - HGBool valid = m_valid; - HGBase_LeaveLock(m_lock); - if (NULL == m_sql || !valid) + if (NULL == m_sql) { return HGBASE_ERR_FAIL; } @@ -999,44 +963,6 @@ HGResult HGPdtToolDbUserMgrImpl::OpenDevice(const HGChar* sn, class HGPdtToolDbD return HGBASE_ERR_OK; } -void HGAPI HGPdtToolDbUserMgrImpl::ThreadFunc(HGThread thread, HGPointer param) -{ - HGPdtToolDbUserMgrImpl* p = (HGPdtToolDbUserMgrImpl*)param; - while (!p->m_stopThread) - { - HGUInt event = 0; - - int connectId = -1; - std::string takeUserName; - int ret = GetUserLoginInfo(p->m_sql, p->m_userName.c_str(), connectId, takeUserName); - if (0 != ret) - { - event = HGPDTTOOLDB_USEREVENT_DBERROR; - } - else if (takeUserName == "root" && takeUserName != p->m_userName) - { - event = HGPDTTOOLDB_USEREVENT_REFUSE; - } - else if (connectId != -1 && connectId != p->m_connectId) - { - event = HGPDTTOOLDB_USEREVENT_CONFLICT; - } - - if (0 != event) - { - HGBase_EnterLock(p->m_lock); - p->m_valid = HGFALSE; - HGBase_LeaveLock(p->m_lock); - - if (NULL != p->m_func) - p->m_func((HGPdtToolDbUserMgr)p, event, p->m_param); - break; - } - - HGBase_WaitEventTimeout(p->m_event, 1000); - } -} - void HGPdtToolDbUserMgrImpl::RemoveDevice(class HGPdtToolDbDeviceImpl* deviceImpl) { std::list::iterator iter; @@ -1337,10 +1263,7 @@ HGPdtToolDbDeviceImpl::~HGPdtToolDbDeviceImpl() HGResult HGPdtToolDbDeviceImpl::GetCurrEntry(HGUInt* entryName) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } @@ -1379,10 +1302,7 @@ HGResult HGPdtToolDbDeviceImpl::GetCurrEntry(HGUInt* entryName) HGResult HGPdtToolDbDeviceImpl::SetCurrEntry(HGUInt entryName) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } @@ -1405,10 +1325,7 @@ HGResult HGPdtToolDbDeviceImpl::SetCurrEntry(HGUInt entryName) HGResult HGPdtToolDbDeviceImpl::GetEntryStatus(HGUInt entryName, HGUInt* entryStatus) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } @@ -1454,10 +1371,7 @@ HGResult HGPdtToolDbDeviceImpl::GetEntryStatus(HGUInt entryName, HGUInt* entrySt HGResult HGPdtToolDbDeviceImpl::SetEntryStatus(HGUInt entryName, HGUInt entryStatus) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } @@ -1508,10 +1422,7 @@ HGResult HGPdtToolDbDeviceImpl::SetEntryStatus(HGUInt entryName, HGUInt entrySta HGResult HGPdtToolDbDeviceImpl::GetEntryExcepDesc(HGUInt entryName, HGChar* excepDesc, HGUInt maxLen) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } @@ -1569,10 +1480,7 @@ HGResult HGPdtToolDbDeviceImpl::GetEntryExcepDesc(HGUInt entryName, HGChar* exce HGResult HGPdtToolDbDeviceImpl::SetEntryExcepDesc(HGUInt entryName, const HGChar* excepDesc) { - HGBase_EnterLock(m_userMgr->m_lock); - HGBool valid = m_userMgr->m_valid; - HGBase_LeaveLock(m_userMgr->m_lock); - if (NULL == m_userMgr->m_sql || !valid) + if (NULL == m_userMgr->m_sql) { return HGBASE_ERR_FAIL; } diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp index 33fed14..9a2f73e 100644 --- a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp +++ b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp @@ -18,9 +18,9 @@ public: HGPdtToolDbUserMgrImpl(); ~HGPdtToolDbUserMgrImpl(); - HGResult Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd, - HGPdtToolDbUserEventFunc func, HGPointer param); + HGResult Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd); HGResult Destroy(); + HGResult GetUserStatus(HGUInt* userStatus); HGResult GetUserType(HGUInt* userType); HGResult GetUserName(HGChar* userName, HGUInt maxLen); HGResult RefuseUser(HGChar* userName); @@ -38,7 +38,6 @@ public: HGResult OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl **deviceImpl); private: - static void HGAPI ThreadFunc(HGThread thread, HGPointer param); void RemoveDevice(class HGPdtToolDbDeviceImpl* deviceImpl); static const HGChar* GetEntryNameCnStr(HGUInt entryName); @@ -64,15 +63,6 @@ private: MYSQL* m_sql; std::string m_userName; int m_connectId; - HGPdtToolDbUserEventFunc m_func; - HGPointer m_param; - HGBool m_valid; - - HGLock m_lock; - HGEvent m_event; - HGBool m_stopThread; - HGThread m_thread; - std::list m_deviceList; }; diff --git a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp index bcb00d0..9a0587f 100644 --- a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp +++ b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp @@ -8,7 +8,7 @@ int main() HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", NULL, NULL, &userMgr); if (NULL != userMgr) { - Sleep(30 * 1000); + //Sleep(30 * 1000); //HGPdtToolDb_UploadFile(userMgr, "G100", "D:\\config.json"); @@ -16,7 +16,7 @@ int main() HGPdtToolDbDevice device = NULL; HGPdtToolDb_OpenDevice(userMgr, "G123456", &device); - HGPdtToolDb_CloseDevice(device); + //HGPdtToolDb_CloseDevice(device); HGPdtToolDb_Export(userMgr, "D:\\1.xls"); HGPdtToolDb_DestroyUserMgr(userMgr);