去掉用户回调接口,增加获取用户状态接口

This commit is contained in:
luoliangyi 2022-12-22 10:07:16 +08:00
parent a27f35c28a
commit c1cb7097c0
6 changed files with 82 additions and 170 deletions

View File

@ -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)

View File

@ -4,6 +4,7 @@ EXPORTS
HGPdtToolDb_CreateUserMgr
HGPdtToolDb_DestroyUserMgr
HGPdtToolDb_GetUserStatus
HGPdtToolDb_GetUserType
HGPdtToolDb_GetUserName
HGPdtToolDb_RefuseUser

View File

@ -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);

View File

@ -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<class HGPdtToolDbDeviceImpl*>::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<class HGPdtToolDbDeviceImpl*>::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;
}

View File

@ -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<class HGPdtToolDbDeviceImpl*> m_deviceList;
};

View File

@ -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);