diff --git a/db/HGPdtToolDb/HGPdtToolDb.cpp b/db/HGPdtToolDb/HGPdtToolDb.cpp
index 065f327..c3e0290 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, 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)
diff --git a/db/HGPdtToolDb/HGPdtToolDb.def b/db/HGPdtToolDb/HGPdtToolDb.def
index 5057f4e..c3ce63e 100644
--- a/db/HGPdtToolDb/HGPdtToolDb.def
+++ b/db/HGPdtToolDb/HGPdtToolDb.def
@@ -6,6 +6,7 @@ HGPdtToolDb_CreateUserMgr
HGPdtToolDb_DestroyUserMgr
HGPdtToolDb_GetUserType
HGPdtToolDb_GetUserName
+HGPdtToolDb_RefuseUser
HGPdtToolDb_GetUserList
HGPdtToolDb_ReleaseUserList
HGPdtToolDb_CreateUser
diff --git a/db/HGPdtToolDb/HGPdtToolDb.h b/db/HGPdtToolDb/HGPdtToolDb.h
index 25225fb..cb2f524 100644
--- a/db/HGPdtToolDb/HGPdtToolDb.h
+++ b/db/HGPdtToolDb/HGPdtToolDb.h
@@ -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);
diff --git a/db/HGPdtToolDb/HGPdtToolDb.vcxproj b/db/HGPdtToolDb/HGPdtToolDb.vcxproj
index e082917..a5544a8 100644
--- a/db/HGPdtToolDb/HGPdtToolDb.vcxproj
+++ b/db/HGPdtToolDb/HGPdtToolDb.vcxproj
@@ -111,8 +111,8 @@
true
false
HGPdtToolDb.def
- libmysql.lib;%(AdditionalDependencies)
- ../lib/x86;%(AdditionalLibraryDirectories)
+ libmysql.lib;HGBase.lib;%(AdditionalDependencies)
+ ../lib/x86;../../../sdk/lib/win/x86/Release;%(AdditionalLibraryDirectories)
diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
index 08d4022..02b4973 100644
--- a/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
+++ b/db/HGPdtToolDb/HGPdtToolDbImpl.cpp
@@ -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::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)
diff --git a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp
index 8f4cf0e..66e2eda 100644
--- a/db/HGPdtToolDb/HGPdtToolDbImpl.hpp
+++ b/db/HGPdtToolDb/HGPdtToolDbImpl.hpp
@@ -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
#include
@@ -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 m_deviceList;
};
diff --git a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp
index 0403a89..bcb00d0 100644
--- a/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp
+++ b/db/HGPdtToolDbTest/HGPdtToolDbTest.cpp
@@ -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);
diff --git a/db/database_cfg.txt b/db/database_cfg.txt
index a9b7a8a..147cdf8 100644
--- a/db/database_cfg.txt
+++ b/db/database_cfg.txt
@@ -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);
\ No newline at end of file