数据库账户实现防止重复登录功能
This commit is contained in:
parent
b9efee3bf4
commit
557df34598
|
@ -2,8 +2,8 @@
|
||||||
#include "HGPdtToolDbImpl.hpp"
|
#include "HGPdtToolDbImpl.hpp"
|
||||||
#include "base/HGInc.h"
|
#include "base/HGInc.h"
|
||||||
|
|
||||||
HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port,
|
HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd,
|
||||||
const HGChar* userName, const HGChar* pwd, HGPdtToolDbUserMgr* userMgr)
|
HGPdtToolDbUserEventFunc func, HGPointer param, HGPdtToolDbUserMgr* userMgr)
|
||||||
{
|
{
|
||||||
if (NULL == userMgr)
|
if (NULL == userMgr)
|
||||||
{
|
{
|
||||||
|
@ -11,7 +11,7 @@ HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port,
|
||||||
}
|
}
|
||||||
|
|
||||||
HGPdtToolDbUserMgrImpl* userMgrImpl = new HGPdtToolDbUserMgrImpl;
|
HGPdtToolDbUserMgrImpl* userMgrImpl = new HGPdtToolDbUserMgrImpl;
|
||||||
HGResult ret = userMgrImpl->Create(host, port, userName, pwd);
|
HGResult ret = userMgrImpl->Create(host, port, userName, pwd, func, param);
|
||||||
if (HGBASE_ERR_OK != ret)
|
if (HGBASE_ERR_OK != ret)
|
||||||
{
|
{
|
||||||
delete userMgrImpl;
|
delete userMgrImpl;
|
||||||
|
@ -62,6 +62,17 @@ HGResult HGAPI HGPdtToolDb_GetUserName(HGPdtToolDbUserMgr userMgr, HGChar* userN
|
||||||
return userMgrImpl->GetUserName(userName, maxLen);
|
return userMgrImpl->GetUserName(userName, maxLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult HGAPI HGPdtToolDb_RefuseUser(HGPdtToolDbUserMgr userMgr, HGChar* userName)
|
||||||
|
{
|
||||||
|
if (NULL == userMgr)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGPdtToolDbUserMgrImpl* userMgrImpl = (HGPdtToolDbUserMgrImpl*)userMgr;
|
||||||
|
return userMgrImpl->RefuseUser(userName);
|
||||||
|
}
|
||||||
|
|
||||||
HGResult HGAPI HGPdtToolDb_GetUserList(HGPdtToolDbUserMgr userMgr, HGChar** userNameList, HGUInt maxLen, HGUInt* count)
|
HGResult HGAPI HGPdtToolDb_GetUserList(HGPdtToolDbUserMgr userMgr, HGChar** userNameList, HGUInt maxLen, HGUInt* count)
|
||||||
{
|
{
|
||||||
if (NULL == userMgr)
|
if (NULL == userMgr)
|
||||||
|
|
|
@ -6,6 +6,7 @@ HGPdtToolDb_CreateUserMgr
|
||||||
HGPdtToolDb_DestroyUserMgr
|
HGPdtToolDb_DestroyUserMgr
|
||||||
HGPdtToolDb_GetUserType
|
HGPdtToolDb_GetUserType
|
||||||
HGPdtToolDb_GetUserName
|
HGPdtToolDb_GetUserName
|
||||||
|
HGPdtToolDb_RefuseUser
|
||||||
HGPdtToolDb_GetUserList
|
HGPdtToolDb_GetUserList
|
||||||
HGPdtToolDb_ReleaseUserList
|
HGPdtToolDb_ReleaseUserList
|
||||||
HGPdtToolDb_CreateUser
|
HGPdtToolDb_CreateUser
|
||||||
|
|
|
@ -5,6 +5,13 @@
|
||||||
#include "base/HGBaseErr.h"
|
#include "base/HGBaseErr.h"
|
||||||
#include "HGPdtToolDbErr.h"
|
#include "HGPdtToolDbErr.h"
|
||||||
|
|
||||||
|
/* 账户在其他地方登录 */
|
||||||
|
#define HGPDTTOOLDB_USEREVENT_CONFLICT 1L
|
||||||
|
/* 网络连接断开 */
|
||||||
|
#define HGPDTTOOLDB_USEREVENT_DISCONNECT 2L
|
||||||
|
/* 被管理员账户强制下线 */
|
||||||
|
#define HGPDTTOOLDB_USEREVENT_REFUSE 3L
|
||||||
|
|
||||||
/* 管理员账户 */
|
/* 管理员账户 */
|
||||||
#define HGPDTTOOLDB_USERTYPE_ROOT 1L
|
#define HGPDTTOOLDB_USERTYPE_ROOT 1L
|
||||||
/* 普通账户 */
|
/* 普通账户 */
|
||||||
|
@ -95,9 +102,12 @@
|
||||||
HG_DECLARE_HANDLE(HGPdtToolDbUserMgr);
|
HG_DECLARE_HANDLE(HGPdtToolDbUserMgr);
|
||||||
HG_DECLARE_HANDLE(HGPdtToolDbDevice);
|
HG_DECLARE_HANDLE(HGPdtToolDbDevice);
|
||||||
|
|
||||||
|
/* 用户事件 */
|
||||||
|
typedef void (HGAPI* HGPdtToolDbUserEventFunc)(HGPdtToolDbUserMgr userMgr, HGUInt event, HGPointer param);
|
||||||
|
|
||||||
/* 登录 */
|
/* 登录 */
|
||||||
HGEXPORT HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar *host, HGUShort port,
|
HGEXPORT HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar *host, HGUShort port, const HGChar *userName, const HGChar *pwd,
|
||||||
const HGChar *userName, const HGChar *pwd, HGPdtToolDbUserMgr *userMgr);
|
HGPdtToolDbUserEventFunc func, HGPointer param, HGPdtToolDbUserMgr *userMgr);
|
||||||
|
|
||||||
/* 登出 */
|
/* 登出 */
|
||||||
HGEXPORT HGResult HGAPI HGPdtToolDb_DestroyUserMgr(HGPdtToolDbUserMgr userMgr);
|
HGEXPORT HGResult HGAPI HGPdtToolDb_DestroyUserMgr(HGPdtToolDbUserMgr userMgr);
|
||||||
|
@ -108,6 +118,9 @@ HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserType(HGPdtToolDbUserMgr userMgr, HGUI
|
||||||
/* 获取当前账户名称 */
|
/* 获取当前账户名称 */
|
||||||
HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserName(HGPdtToolDbUserMgr userMgr, HGChar *userName, HGUInt maxLen);
|
HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserName(HGPdtToolDbUserMgr userMgr, HGChar *userName, HGUInt maxLen);
|
||||||
|
|
||||||
|
/* 强制某个账户下线,需要管理员账户才能调用 */
|
||||||
|
HGEXPORT HGResult HGAPI HGPdtToolDb_RefuseUser(HGPdtToolDbUserMgr userMgr, HGChar* userName);
|
||||||
|
|
||||||
/* 获取账户列表,需要管理员账户才能调用 */
|
/* 获取账户列表,需要管理员账户才能调用 */
|
||||||
HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserList(HGPdtToolDbUserMgr userMgr, HGChar **userNameList, HGUInt maxLen, HGUInt* count);
|
HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserList(HGPdtToolDbUserMgr userMgr, HGChar **userNameList, HGUInt maxLen, HGUInt* count);
|
||||||
|
|
||||||
|
|
|
@ -111,8 +111,8 @@
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableUAC>false</EnableUAC>
|
<EnableUAC>false</EnableUAC>
|
||||||
<ModuleDefinitionFile>HGPdtToolDb.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>HGPdtToolDb.def</ModuleDefinitionFile>
|
||||||
<AdditionalDependencies>libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>libmysql.lib;HGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>../lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>../lib/x86;../../../sdk/lib/win/x86/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
|
|
@ -102,6 +102,16 @@ HGPdtToolDbUserMgrImpl::HGPdtToolDbUserMgrImpl()
|
||||||
{
|
{
|
||||||
m_sql = NULL;
|
m_sql = NULL;
|
||||||
m_userName.clear();
|
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();
|
m_deviceList.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,7 +120,8 @@ HGPdtToolDbUserMgrImpl::~HGPdtToolDbUserMgrImpl()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd)
|
HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd,
|
||||||
|
HGPdtToolDbUserEventFunc func, HGPointer param)
|
||||||
{
|
{
|
||||||
if (NULL != m_sql)
|
if (NULL != m_sql)
|
||||||
{
|
{
|
||||||
|
@ -160,8 +171,30 @@ HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int connectId = GetConnectId(sql);
|
||||||
|
if (-1 == connectId)
|
||||||
|
{
|
||||||
|
mysql_close(sql);
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!SetUserLoginInfo(sql, userName, connectId, userName))
|
||||||
|
{
|
||||||
|
mysql_close(sql);
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
m_sql = sql;
|
m_sql = sql;
|
||||||
m_userName = userName;
|
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;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,9 +205,22 @@ HGResult HGPdtToolDbUserMgrImpl::Destroy()
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
mysql_close(m_sql);
|
||||||
m_sql = NULL;
|
m_sql = NULL;
|
||||||
m_userName.clear();
|
m_userName.clear();
|
||||||
|
m_connectId = -1;
|
||||||
|
m_func = NULL;
|
||||||
|
m_param = NULL;
|
||||||
|
m_valid = HGFALSE;
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,9 +263,47 @@ HGResult HGPdtToolDbUserMgrImpl::GetUserName(HGChar* userName, HGUInt maxLen)
|
||||||
return HGBASE_ERR_OK;
|
return HGBASE_ERR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HGResult HGPdtToolDbUserMgrImpl::RefuseUser(HGChar* userName)
|
||||||
|
{
|
||||||
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL == userName || 0 == *userName)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HGUInt userType = 0;
|
||||||
|
GetUserType(&userType);
|
||||||
|
if (HGPDTTOOLDB_USERTYPE_ROOT != userType)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_ACCESSDENIED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == strcmp(userName, "root"))
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!SetUserLoginInfo(m_sql, userName, m_connectId, m_userName))
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HGBASE_ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt* count)
|
HGResult HGPdtToolDbUserMgrImpl::GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt* count)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -287,7 +371,10 @@ HGResult HGPdtToolDbUserMgrImpl::ReleaseUserList(HGChar** userNameList, HGUInt c
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar* defPwd)
|
HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar* defPwd)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -341,7 +428,10 @@ HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName)
|
HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -395,7 +485,10 @@ HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName)
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGChar* pwd)
|
HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGChar* pwd)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +513,10 @@ HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGCha
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd)
|
HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGChar* newPwd)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -448,7 +544,10 @@ HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGCh
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fileName)
|
HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fileName)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -546,7 +645,10 @@ HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fil
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* fileName)
|
HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* fileName)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -614,7 +716,10 @@ HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* f
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath)
|
HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -759,7 +864,10 @@ HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath)
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGUInt maxLen)
|
HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGUInt maxLen)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -810,7 +918,10 @@ HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGU
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* value)
|
HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* value)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -842,7 +953,10 @@ HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* valu
|
||||||
|
|
||||||
HGResult HGPdtToolDbUserMgrImpl::OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl** deviceImpl)
|
HGResult HGPdtToolDbUserMgrImpl::OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl** deviceImpl)
|
||||||
{
|
{
|
||||||
if (NULL == m_sql)
|
HGBase_EnterLock(m_lock);
|
||||||
|
HGBool valid = m_valid;
|
||||||
|
HGBase_LeaveLock(m_lock);
|
||||||
|
if (NULL == m_sql || !valid)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_FAIL;
|
return HGBASE_ERR_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -877,6 +991,44 @@ HGResult HGPdtToolDbUserMgrImpl::OpenDevice(const HGChar* sn, class HGPdtToolDbD
|
||||||
return HGBASE_ERR_OK;
|
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;
|
||||||
|
std::string takeUserName;
|
||||||
|
bool ret = GetUserLoginInfo(p->m_sql, p->m_userName.c_str(), connectId, takeUserName);
|
||||||
|
if (!ret)
|
||||||
|
{
|
||||||
|
event = HGPDTTOOLDB_USEREVENT_DISCONNECT;
|
||||||
|
}
|
||||||
|
else if (takeUserName == "root" && p->m_userName != takeUserName)
|
||||||
|
{
|
||||||
|
event = HGPDTTOOLDB_USEREVENT_REFUSE;
|
||||||
|
}
|
||||||
|
else if (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)
|
void HGPdtToolDbUserMgrImpl::RemoveDevice(class HGPdtToolDbDeviceImpl* deviceImpl)
|
||||||
{
|
{
|
||||||
std::list<class HGPdtToolDbDeviceImpl*>::iterator iter;
|
std::list<class HGPdtToolDbDeviceImpl*>::iterator iter;
|
||||||
|
@ -953,6 +1105,75 @@ std::string HGPdtToolDbUserMgrImpl::GetAuthString(MYSQL* sql, const HGChar* pwd)
|
||||||
return authString;
|
return authString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int HGPdtToolDbUserMgrImpl::GetConnectId(MYSQL* sql)
|
||||||
|
{
|
||||||
|
assert(NULL != sql);
|
||||||
|
|
||||||
|
int connId = -1;
|
||||||
|
char sqlCmd[1024];
|
||||||
|
sprintf(sqlCmd, "select connection_id();");
|
||||||
|
int ret = mysql_query(sql, sqlCmd);
|
||||||
|
if (0 == ret)
|
||||||
|
{
|
||||||
|
MYSQL_RES* sqlRes = mysql_use_result(sql);
|
||||||
|
if (NULL != sqlRes)
|
||||||
|
{
|
||||||
|
MYSQL_ROW row = mysql_fetch_row(sqlRes);
|
||||||
|
if (NULL != row && NULL != row[0])
|
||||||
|
connId = atoi(row[0]);
|
||||||
|
mysql_free_result(sqlRes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return connId;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HGPdtToolDbUserMgrImpl::SetUserLoginInfo(MYSQL* sql, const HGChar* userName, int connectId, const std::string& takeUserName)
|
||||||
|
{
|
||||||
|
assert(NULL != sql);
|
||||||
|
assert(NULL != userName && 0 != *userName);
|
||||||
|
assert(-1 != connectId);
|
||||||
|
assert(!takeUserName.empty());
|
||||||
|
|
||||||
|
char sqlCmd[1024];
|
||||||
|
sprintf(sqlCmd, "update user_list set connect_id = %d, take_user = '%s' where user = '%s';",
|
||||||
|
connectId, takeUserName.c_str(), userName);
|
||||||
|
int ret = mysql_query(sql, sqlCmd);
|
||||||
|
return (0 == ret) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool HGPdtToolDbUserMgrImpl::GetUserLoginInfo(MYSQL* sql, const HGChar* userName, int& connectId, std::string& takeUserName)
|
||||||
|
{
|
||||||
|
assert(NULL != sql);
|
||||||
|
assert(NULL != userName && 0 != *userName);
|
||||||
|
connectId = -1;
|
||||||
|
takeUserName.clear();
|
||||||
|
|
||||||
|
char sqlCmd[1024];
|
||||||
|
sprintf(sqlCmd, "select connect_id, take_user from user_list where user = '%s';", userName);
|
||||||
|
int ret = mysql_query(sql, sqlCmd);
|
||||||
|
if (0 != ret)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
MYSQL_RES* sqlRes = mysql_use_result(sql);
|
||||||
|
if (NULL != sqlRes)
|
||||||
|
{
|
||||||
|
MYSQL_ROW row = mysql_fetch_row(sqlRes);
|
||||||
|
if (NULL != row)
|
||||||
|
{
|
||||||
|
assert(NULL != row[0] && NULL != row[1]);
|
||||||
|
connectId = atoi(row[0]);
|
||||||
|
takeUserName = row[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
mysql_free_result(sqlRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
int HGPdtToolDbUserMgrImpl::CreateFileTable(MYSQL* sql)
|
int HGPdtToolDbUserMgrImpl::CreateFileTable(MYSQL* sql)
|
||||||
{
|
{
|
||||||
assert(NULL != sql);
|
assert(NULL != sql);
|
||||||
|
@ -1109,6 +1330,14 @@ HGPdtToolDbDeviceImpl::~HGPdtToolDbDeviceImpl()
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::GetCurrEntry(HGUInt* entryName)
|
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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == entryName)
|
if (NULL == entryName)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
@ -1143,6 +1372,14 @@ HGResult HGPdtToolDbDeviceImpl::GetCurrEntry(HGUInt* entryName)
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::SetCurrEntry(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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (0 != entryName && 0xFFFFFFFF != entryName)
|
if (0 != entryName && 0xFFFFFFFF != entryName)
|
||||||
{
|
{
|
||||||
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
||||||
|
@ -1161,6 +1398,14 @@ HGResult HGPdtToolDbDeviceImpl::SetCurrEntry(HGUInt entryName)
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::GetEntryStatus(HGUInt entryName, HGUInt* entryStatus)
|
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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == entryStatus)
|
if (NULL == entryStatus)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
@ -1202,6 +1447,14 @@ HGResult HGPdtToolDbDeviceImpl::GetEntryStatus(HGUInt entryName, HGUInt* entrySt
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::SetEntryStatus(HGUInt entryName, HGUInt entryStatus)
|
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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (entryStatus > HGPDTTOOLDB_ENTRYSTATUS_PASS)
|
if (entryStatus > HGPDTTOOLDB_ENTRYSTATUS_PASS)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
@ -1248,6 +1501,14 @@ HGResult HGPdtToolDbDeviceImpl::SetEntryStatus(HGUInt entryName, HGUInt entrySta
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::GetEntryExcepDesc(HGUInt entryName, HGChar* excepDesc, HGUInt maxLen)
|
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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
if (NULL == excepDesc || 0 == maxLen)
|
if (NULL == excepDesc || 0 == maxLen)
|
||||||
{
|
{
|
||||||
return HGBASE_ERR_INVALIDARG;
|
return HGBASE_ERR_INVALIDARG;
|
||||||
|
@ -1301,6 +1562,14 @@ HGResult HGPdtToolDbDeviceImpl::GetEntryExcepDesc(HGUInt entryName, HGChar* exce
|
||||||
|
|
||||||
HGResult HGPdtToolDbDeviceImpl::SetEntryExcepDesc(HGUInt entryName, const HGChar* excepDesc)
|
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)
|
||||||
|
{
|
||||||
|
return HGBASE_ERR_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
||||||
const HGChar* tableName = GetDescTableName(entryName);
|
const HGChar* tableName = GetDescTableName(entryName);
|
||||||
if (NULL == entryNameStr || NULL == tableName)
|
if (NULL == entryNameStr || NULL == tableName)
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
|
|
||||||
#include "base/HGDef.h"
|
#include "base/HGDef.h"
|
||||||
#include "base/HGBaseErr.h"
|
#include "base/HGBaseErr.h"
|
||||||
|
#include "base/HGLock.h"
|
||||||
|
#include "base/HGEvent.h"
|
||||||
|
#include "base/HGThread.h"
|
||||||
|
#include "HGPdtToolDb.h"
|
||||||
#include "mysql.h"
|
#include "mysql.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
@ -14,10 +18,12 @@ public:
|
||||||
HGPdtToolDbUserMgrImpl();
|
HGPdtToolDbUserMgrImpl();
|
||||||
~HGPdtToolDbUserMgrImpl();
|
~HGPdtToolDbUserMgrImpl();
|
||||||
|
|
||||||
HGResult Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd);
|
HGResult Create(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd,
|
||||||
|
HGPdtToolDbUserEventFunc func, HGPointer param);
|
||||||
HGResult Destroy();
|
HGResult Destroy();
|
||||||
HGResult GetUserType(HGUInt* userType);
|
HGResult GetUserType(HGUInt* userType);
|
||||||
HGResult GetUserName(HGChar* userName, HGUInt maxLen);
|
HGResult GetUserName(HGChar* userName, HGUInt maxLen);
|
||||||
|
HGResult RefuseUser(HGChar* userName);
|
||||||
HGResult GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt *count);
|
HGResult GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt *count);
|
||||||
static HGResult ReleaseUserList(HGChar** userNameList, HGUInt count);
|
static HGResult ReleaseUserList(HGChar** userNameList, HGUInt count);
|
||||||
HGResult CreateUser(const HGChar* userName, const HGChar* defPwd);
|
HGResult CreateUser(const HGChar* userName, const HGChar* defPwd);
|
||||||
|
@ -32,11 +38,15 @@ public:
|
||||||
HGResult OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl **deviceImpl);
|
HGResult OpenDevice(const HGChar* sn, class HGPdtToolDbDeviceImpl **deviceImpl);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
||||||
void RemoveDevice(class HGPdtToolDbDeviceImpl* deviceImpl);
|
void RemoveDevice(class HGPdtToolDbDeviceImpl* deviceImpl);
|
||||||
static const HGChar* GetEntryNameCnStr(HGUInt entryName);
|
static const HGChar* GetEntryNameCnStr(HGUInt entryName);
|
||||||
|
|
||||||
static std::string GetPassword(MYSQL* sql, const HGChar* userName);
|
static std::string GetPassword(MYSQL* sql, const HGChar* userName);
|
||||||
static std::string GetAuthString(MYSQL* sql, const HGChar* pwd);
|
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);
|
||||||
|
|
||||||
int CreateFileTable(MYSQL* sql);
|
int CreateFileTable(MYSQL* sql);
|
||||||
int CreateMainTestTable(MYSQL *sql);
|
int CreateMainTestTable(MYSQL *sql);
|
||||||
|
@ -53,6 +63,16 @@ private:
|
||||||
private:
|
private:
|
||||||
MYSQL* m_sql;
|
MYSQL* m_sql;
|
||||||
std::string m_userName;
|
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;
|
std::list<class HGPdtToolDbDeviceImpl*> m_deviceList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,14 @@
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
HGPdtToolDbUserMgr userMgr = NULL;
|
HGPdtToolDbUserMgr userMgr = NULL;
|
||||||
HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", &userMgr);
|
HGPdtToolDb_CreateUserMgr("127.0.0.1", 3306, "root", "123456", NULL, NULL, &userMgr);
|
||||||
if (NULL != userMgr)
|
if (NULL != userMgr)
|
||||||
{
|
{
|
||||||
HGPdtToolDb_UploadFile(userMgr, "G100", "D:\\config.json");
|
Sleep(30 * 1000);
|
||||||
|
|
||||||
HGPdtToolDb_DownloadFile(userMgr, "G100", "D:\\123.txt");
|
//HGPdtToolDb_UploadFile(userMgr, "G100", "D:\\config.json");
|
||||||
|
|
||||||
|
//HGPdtToolDb_DownloadFile(userMgr, "G100", "D:\\123.txt");
|
||||||
|
|
||||||
HGPdtToolDbDevice device = NULL;
|
HGPdtToolDbDevice device = NULL;
|
||||||
HGPdtToolDb_OpenDevice(userMgr, "G123456", &device);
|
HGPdtToolDb_OpenDevice(userMgr, "G123456", &device);
|
||||||
|
|
|
@ -3,6 +3,6 @@
|
||||||
3.create user 'huago'@'%' identified by 'huago';
|
3.create user 'huago'@'%' identified by 'huago';
|
||||||
4.grant all privileges on huago_production_tool.* to 'huago'@'%';
|
4.grant all privileges on huago_production_tool.* to 'huago'@'%';
|
||||||
5.use huago_production_tool;
|
5.use huago_production_tool;
|
||||||
6.create table user_list (user varchar(20) not null primary key, password text);
|
6.create table user_list (user varchar(20) not null primary key, password text, connect_id int, take_user text);
|
||||||
7.insert into user_list (user, password) values ('root', password('123456'));
|
7.insert into user_list (user, password) values ('root', password('123456'));
|
||||||
8.create table root_config (config_key varchar(40) not null primary key, config_value text);
|
8.create table root_config (config_key varchar(40) not null primary key, config_value text);
|
Loading…
Reference in New Issue