数据库账户实现防止重复登录功能
This commit is contained in:
parent
b9efee3bf4
commit
557df34598
|
@ -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, HGPdtToolDbUserMgr* userMgr)
|
||||
HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port, const HGChar* userName, const HGChar* pwd,
|
||||
HGPdtToolDbUserEventFunc func, HGPointer param, HGPdtToolDbUserMgr* userMgr)
|
||||
{
|
||||
if (NULL == userMgr)
|
||||
{
|
||||
|
@ -11,7 +11,7 @@ HGResult HGAPI HGPdtToolDb_CreateUserMgr(const HGChar* host, HGUShort port,
|
|||
}
|
||||
|
||||
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)
|
||||
{
|
||||
delete userMgrImpl;
|
||||
|
@ -62,6 +62,17 @@ HGResult HGAPI HGPdtToolDb_GetUserName(HGPdtToolDbUserMgr userMgr, HGChar* userN
|
|||
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)
|
||||
{
|
||||
if (NULL == userMgr)
|
||||
|
|
|
@ -6,6 +6,7 @@ HGPdtToolDb_CreateUserMgr
|
|||
HGPdtToolDb_DestroyUserMgr
|
||||
HGPdtToolDb_GetUserType
|
||||
HGPdtToolDb_GetUserName
|
||||
HGPdtToolDb_RefuseUser
|
||||
HGPdtToolDb_GetUserList
|
||||
HGPdtToolDb_ReleaseUserList
|
||||
HGPdtToolDb_CreateUser
|
||||
|
|
|
@ -5,6 +5,13 @@
|
|||
#include "base/HGBaseErr.h"
|
||||
#include "HGPdtToolDbErr.h"
|
||||
|
||||
/* 账户在其他地方登录 */
|
||||
#define HGPDTTOOLDB_USEREVENT_CONFLICT 1L
|
||||
/* 网络连接断开 */
|
||||
#define HGPDTTOOLDB_USEREVENT_DISCONNECT 2L
|
||||
/* 被管理员账户强制下线 */
|
||||
#define HGPDTTOOLDB_USEREVENT_REFUSE 3L
|
||||
|
||||
/* 管理员账户 */
|
||||
#define HGPDTTOOLDB_USERTYPE_ROOT 1L
|
||||
/* 普通账户 */
|
||||
|
@ -95,9 +102,12 @@
|
|||
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, HGPdtToolDbUserMgr *userMgr);
|
||||
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_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_RefuseUser(HGPdtToolDbUserMgr userMgr, HGChar* userName);
|
||||
|
||||
/* 获取账户列表,需要管理员账户才能调用 */
|
||||
HGEXPORT HGResult HGAPI HGPdtToolDb_GetUserList(HGPdtToolDbUserMgr userMgr, HGChar **userNameList, HGUInt maxLen, HGUInt* count);
|
||||
|
||||
|
|
|
@ -111,8 +111,8 @@
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>HGPdtToolDb.def</ModuleDefinitionFile>
|
||||
<AdditionalDependencies>libmysql.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>../lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>libmysql.lib;HGBase.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalLibraryDirectories>../lib/x86;../../../sdk/lib/win/x86/Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
|
|
|
@ -102,6 +102,16 @@ 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();
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -160,8 +171,30 @@ HGResult HGPdtToolDbUserMgrImpl::Create(const HGChar* host, HGUShort port, const
|
|||
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_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;
|
||||
}
|
||||
|
||||
|
@ -172,9 +205,22 @@ HGResult HGPdtToolDbUserMgrImpl::Destroy()
|
|||
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);
|
||||
m_sql = NULL;
|
||||
m_userName.clear();
|
||||
m_connectId = -1;
|
||||
m_func = NULL;
|
||||
m_param = NULL;
|
||||
m_valid = HGFALSE;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
|
@ -217,9 +263,47 @@ HGResult HGPdtToolDbUserMgrImpl::GetUserName(HGChar* userName, HGUInt maxLen)
|
|||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
@ -287,7 +371,10 @@ HGResult HGPdtToolDbUserMgrImpl::ReleaseUserList(HGChar** userNameList, HGUInt c
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -341,7 +428,10 @@ HGResult HGPdtToolDbUserMgrImpl::CreateUser(const HGChar* userName, const HGChar
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -395,7 +485,10 @@ HGResult HGPdtToolDbUserMgrImpl::DestroyUser(const HGChar* userName)
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -420,7 +513,10 @@ HGResult HGPdtToolDbUserMgrImpl::SetPassword(const HGChar* userName, const HGCha
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -448,7 +544,10 @@ HGResult HGPdtToolDbUserMgrImpl::ModifyPassword(const HGChar* oldPwd, const HGCh
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -546,7 +645,10 @@ HGResult HGPdtToolDbUserMgrImpl::UploadFile(const HGChar* tag, const HGChar* fil
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -614,7 +716,10 @@ HGResult HGPdtToolDbUserMgrImpl::DownloadFile(const HGChar* tag, const HGChar* f
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -759,7 +864,10 @@ HGResult HGPdtToolDbUserMgrImpl::Export(const HGChar* xlsPath)
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -810,7 +918,10 @@ HGResult HGPdtToolDbUserMgrImpl::GetConfig(const HGChar* key, HGChar* value, HGU
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -842,7 +953,10 @@ HGResult HGPdtToolDbUserMgrImpl::SetConfig(const HGChar* key, const HGChar* valu
|
|||
|
||||
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;
|
||||
}
|
||||
|
@ -877,6 +991,44 @@ 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;
|
||||
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)
|
||||
{
|
||||
std::list<class HGPdtToolDbDeviceImpl*>::iterator iter;
|
||||
|
@ -953,6 +1105,75 @@ std::string HGPdtToolDbUserMgrImpl::GetAuthString(MYSQL* sql, const HGChar* pwd)
|
|||
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)
|
||||
{
|
||||
assert(NULL != sql);
|
||||
|
@ -1109,6 +1330,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
if (NULL == entryName)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
|
@ -1143,6 +1372,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
if (0 != entryName && 0xFFFFFFFF != entryName)
|
||||
{
|
||||
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
||||
|
@ -1161,6 +1398,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
if (NULL == entryStatus)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
|
@ -1202,6 +1447,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
if (entryStatus > HGPDTTOOLDB_ENTRYSTATUS_PASS)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
|
@ -1248,6 +1501,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
if (NULL == excepDesc || 0 == maxLen)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
|
@ -1301,6 +1562,14 @@ 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)
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
const HGChar* entryNameStr = GetEntryNameStr(entryName);
|
||||
const HGChar* tableName = GetDescTableName(entryName);
|
||||
if (NULL == entryNameStr || NULL == tableName)
|
||||
|
|
|
@ -3,6 +3,10 @@
|
|||
|
||||
#include "base/HGDef.h"
|
||||
#include "base/HGBaseErr.h"
|
||||
#include "base/HGLock.h"
|
||||
#include "base/HGEvent.h"
|
||||
#include "base/HGThread.h"
|
||||
#include "HGPdtToolDb.h"
|
||||
#include "mysql.h"
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
@ -14,10 +18,12 @@ public:
|
|||
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 GetUserType(HGUInt* userType);
|
||||
HGResult GetUserName(HGChar* userName, HGUInt maxLen);
|
||||
HGResult RefuseUser(HGChar* userName);
|
||||
HGResult GetUserList(HGChar** userNameList, HGUInt maxLen, HGUInt *count);
|
||||
static HGResult ReleaseUserList(HGChar** userNameList, HGUInt count);
|
||||
HGResult CreateUser(const HGChar* userName, const HGChar* defPwd);
|
||||
|
@ -32,11 +38,15 @@ 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);
|
||||
|
||||
static std::string GetPassword(MYSQL* sql, const HGChar* userName);
|
||||
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 CreateMainTestTable(MYSQL *sql);
|
||||
|
@ -53,6 +63,16 @@ private:
|
|||
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;
|
||||
};
|
||||
|
||||
|
|
|
@ -5,12 +5,14 @@
|
|||
int main()
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
HGPdtToolDb_OpenDevice(userMgr, "G123456", &device);
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
3.create user 'huago'@'%' identified by 'huago';
|
||||
4.grant all privileges on huago_production_tool.* to 'huago'@'%';
|
||||
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'));
|
||||
8.create table root_config (config_key varchar(40) not null primary key, config_value text);
|
Loading…
Reference in New Issue