websdk关闭连接时,不再关闭设备

This commit is contained in:
luoliangyi 2023-05-16 15:37:40 +08:00
parent 6ba76d9a69
commit f3ddd52c20
8 changed files with 145 additions and 154 deletions

View File

@ -17,6 +17,7 @@ extern "C"
#include <curl/curl.h>
#include <list>
#include <algorithm>
#include "SockIoUser.h"
namespace ver_1
{
@ -154,10 +155,7 @@ namespace ver_1
HGBase_CreateLock(&m_lock);
m_devName.clear();
m_devHandle = NULL;
m_saneEvent = NULL;
m_saneParam = NULL;
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
m_user.clear();
m_scanInsertImgName.clear();
m_scanIsInsert = false;
@ -236,41 +234,29 @@ namespace ver_1
StopScan();
}
void ManagerV1::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
void ManagerV1::AddUser(class SockIoUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
m_user.push_back(user);
HGBase_LeaveLock(m_lock);
}
HGBase_EnterLock(m_lock);
m_saneEvent = event;
m_saneParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::SetSaneImageCallback(SaneImageCallback func, void* param)
{
assert(NULL != func && NULL != param);
HGBase_EnterLock(m_lock);
m_saneImageCallback = func;
m_saneImageParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::ResetSaneEvent()
{
HGBase_EnterLock(m_lock);
m_saneEvent = NULL;
m_saneParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::ResetSaneImageCallback()
{
HGBase_EnterLock(m_lock);
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV1::RemoveUser(class SockIoUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
std::list<class SockIoUser *>::iterator iter;
for (iter = m_user.begin(); iter != m_user.end(); ++iter)
{
if (*iter == user)
{
m_user.erase(iter);
break;
}
}
HGBase_LeaveLock(m_lock);
}
bool ManagerV1::Scan(const std::string& insertImgName, bool isInsert)
{
@ -1756,8 +1742,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1779,8 +1768,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_REMOVE, sane_dev->name, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_REMOVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1789,8 +1781,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_STATUS, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_STATUS, (const char*)data, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_STATUS, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1799,8 +1794,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_ERROR, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1809,8 +1807,11 @@ namespace ver_1
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_WORKING, (const char*)data, false, p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_WORKING, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -1896,8 +1897,11 @@ namespace ver_1
imgBase64 += GetBase64(img);
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneImageCallback)
p->m_saneImageCallback(imgName.c_str(), imgBase64.c_str(), p->m_saneImageParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneImageCallback(imgName.c_str(), imgBase64.c_str(), *iter);
}
HGBase_LeaveLock(p->m_lock);
HGBase_DestroyImage(img);
@ -1922,8 +1926,11 @@ namespace ver_1
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class SockIoUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
SockIoUser::SaneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;

View File

@ -11,6 +11,7 @@
#include "Manager.h"
#include "Msg.h"
#include <string>
#include <list>
#include <vector>
namespace ver_1
@ -87,9 +88,6 @@ namespace ver_1
int format; // 上传格式 0: ofd 1: pdf 2: zip, 默认2
};
typedef void (*SaneEvent)(int code, const char* str, bool err, void* param);
typedef void (*SaneImageCallback)(const char* name, const char *base64, void* param);
class ManagerV1 : public Manager
{
public:
@ -103,12 +101,8 @@ namespace ver_1
// 扫描完成
void ScanFinish(const ScanFinishParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);
void SetSaneImageCallback(SaneImageCallback func, void* param);
// 清理回调
void ResetSaneEvent();
void ResetSaneImageCallback();
void AddUser(class SockIoUser *user);
void RemoveUser(class SockIoUser *user);
// 扫描
bool Scan(const std::string& insertImgName, bool isInsert);
@ -189,14 +183,11 @@ namespace ver_1
std::string m_devName;
SANE_Handle m_devHandle;
DevParam m_devParam;
SaneEvent m_saneEvent;
void* m_saneParam;
SaneImageCallback m_saneImageCallback;
void* m_saneImageParam;
std::list<class SockIoUser *> m_user;
std::string m_scanInsertImgName;
bool m_scanIsInsert;
bool m_scanning;
HGEvent m_scanEvent;
};
}
}

View File

@ -22,6 +22,7 @@ extern "C"
#include <curl/curl.h>
#include <list>
#include <algorithm>
#include "WSUser.h"
namespace ver_2
{
@ -50,10 +51,7 @@ namespace ver_2
HGBase_StandardiseFileName(m_globalCfg.fileSavePath.c_str(), stdSavePath, 256);
m_globalCfg.fileSavePath = stdSavePath;
m_saneEvent = NULL;
m_saneParam = NULL;
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
m_user.clear();
m_initDevice = false;
m_devNameList.clear();
@ -207,41 +205,29 @@ namespace ver_2
}
}
void ManagerV2::SetSaneEvent(SaneEvent event, void* param)
{
assert(NULL != event && NULL != param);
void ManagerV2::AddUser(class WSUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
m_user.push_back(user);
HGBase_LeaveLock(m_lock);
}
HGBase_EnterLock(m_lock);
m_saneEvent = event;
m_saneParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::SetSaneImageCallback(SaneImageCallback func, void* param)
{
assert(NULL != func && NULL != param);
HGBase_EnterLock(m_lock);
m_saneImageCallback = func;
m_saneImageParam = param;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::ResetSaneEvent()
{
HGBase_EnterLock(m_lock);
m_saneEvent = NULL;
m_saneParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::ResetSaneImageCallback()
{
HGBase_EnterLock(m_lock);
m_saneImageCallback = NULL;
m_saneImageParam = NULL;
HGBase_LeaveLock(m_lock);
}
void ManagerV2::RemoveUser(class WSUser *user)
{
assert(NULL != user);
HGBase_EnterLock(m_lock);
std::list<class WSUser *>::iterator iter;
for (iter = m_user.begin(); iter != m_user.end(); ++iter)
{
if (*iter == user)
{
m_user.erase(iter);
break;
}
}
HGBase_LeaveLock(m_lock);
}
int ManagerV2::SetGlobalConfig(const GlobalConfig& cfg, HGUInt mask, std::string& errInfo)
{
@ -4044,8 +4030,11 @@ namespace ver_2
HGBase_EnterLock(p->m_lock);
p->m_devNameList.push_back(sane_dev->name);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_ARRIVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4075,8 +4064,11 @@ namespace ver_2
break;
}
}
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_REMOVE, sane_dev->name, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_REMOVE, sane_dev->name, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4085,8 +4077,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_WORKING, (const char*)data, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_WORKING, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4108,8 +4103,11 @@ namespace ver_2
}
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_FINISH, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4118,8 +4116,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_STATUS, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_STATUS, (const char*)data, false, p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_STATUS, (const char*)data, false, *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4128,8 +4129,11 @@ namespace ver_2
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_ERROR, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_saneEvent)
p->m_saneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), p->m_saneParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneEvent(SANEEVENT_ERROR, (const char*)data, (0 != *len), *iter);
}
HGBase_LeaveLock(p->m_lock);
}
break;
@ -4182,8 +4186,11 @@ namespace ver_2
}
}
if (NULL != p->m_saneImageCallback)
p->m_saneImageCallback(imagePath.c_str(), blank ? true : false, p->m_saneImageParam);
std::list<class WSUser *>::iterator iter;
for (iter = p->m_user.begin(); iter != p->m_user.end(); ++iter)
{
WSUser::SaneImageCallback(imagePath.c_str(), blank ? true : false, *iter);
}
}
HGBase_LeaveLock(p->m_lock);

View File

@ -111,9 +111,6 @@ namespace ver_2
std::string thumbBase64;
};
typedef void (*SaneEvent)(int code, const char *str, bool err, void* param);
typedef void (*SaneImageCallback)(const char* path, bool blank, void* param);
class ManagerV2 : public Manager
{
public:
@ -129,12 +126,8 @@ namespace ver_2
// 删除文件
void RemoveSavedFile(const RemoveSavedFileParam* param);
// 设置回调
void SetSaneEvent(SaneEvent event, void* param);
void SetSaneImageCallback(SaneImageCallback func, void* param);
// 清理回调
void ResetSaneEvent();
void ResetSaneImageCallback();
void AddUser(class WSUser *user);
void RemoveUser(class WSUser *user);
// 设置全局配置
int SetGlobalConfig(const GlobalConfig& cfg, HGUInt mask, std::string &errInfo);
@ -304,10 +297,7 @@ namespace ver_2
private:
HGLock m_lock;
GlobalConfig m_globalCfg;
SaneEvent m_saneEvent;
void* m_saneParam;
SaneImageCallback m_saneImageCallback;
void* m_saneImageParam;
std::list<class WSUser *> m_user;
bool m_initDevice;
std::vector<std::string> m_devNameList;
@ -328,4 +318,4 @@ namespace ver_2
int m_bindNameBase;
std::list<std::string> m_saveFilePathList;
};
}
}

View File

@ -16,14 +16,12 @@ namespace ver_1
#endif
: WebUser(server, id, ip, port, sockConn)
{
GetManager()->SetSaneEvent(SaneEvent2, this);
GetManager()->SetSaneImageCallback(SaneImageCallback2, this);
GetManager()->AddUser(this);
}
SockIoUser::~SockIoUser()
{
GetManager()->ResetSaneImageCallback();
GetManager()->ResetSaneEvent();
GetManager()->RemoveUser(this);
}
ManagerV1* SockIoUser::GetManager()
@ -427,7 +425,7 @@ namespace ver_1
}
}
void SockIoUser::SaneEvent2(int code, const char* str, bool err, void* param)
void SockIoUser::SaneEvent(int code, const char* str, bool err, void* param)
{
SockIoUser* p = (SockIoUser*)param;
@ -464,7 +462,7 @@ namespace ver_1
}
}
void SockIoUser::SaneImageCallback2(const char* name, const char* base64, void* param)
void SockIoUser::SaneImageCallback(const char* name, const char* base64, void* param)
{
SockIoUser* p = (SockIoUser*)param;

View File

@ -24,12 +24,13 @@ namespace ver_1
void PostEventMsg(const HGByte* data, HGUInt dataSize);
virtual void ThreadFunc();
private:
static void SaneEvent2(int code, const char* str, bool err, void* param);
static void SaneImageCallback2(const char* name, const char *base64, void* param);
public:
static void SaneEvent(int code, const char* str, bool err, void* param);
static void SaneImageCallback(const char* name, const char *base64, void* param);
private:
static void GetMsgInfo(const SockIoCmdParam* param, std::string& user, std::string& data);
bool ShakeHand(const std::string& head);
void Pong();
bool SendResponse(const HGByte* data, HGUInt size, HGBool text);
};
}
}

View File

@ -202,16 +202,12 @@ namespace ver_2
m_startScanIsLocalSave = true;
m_startScanIsGetBase64 = false;
GetManager()->SetSaneEvent(SaneEvent2, this);
GetManager()->SetSaneImageCallback(SaneImageCallback2, this);
GetManager()->AddUser(this);
}
WSUser::~WSUser()
{
std::string errInfo;
GetManager()->DeinitDevice(errInfo);
GetManager()->ResetSaneImageCallback();
GetManager()->ResetSaneEvent();
GetManager()->RemoveUser(this);
}
ManagerV2* WSUser::GetManager()
@ -769,7 +765,7 @@ namespace ver_2
}
}
void WSUser::SaneEvent2(int code, const char* str, bool err, void* param)
void WSUser::SaneEvent(int code, const char* str, bool err, void* param)
{
WSUser* p = (WSUser*)param;
@ -897,7 +893,7 @@ namespace ver_2
}
}
void WSUser::SaneImageCallback2(const char* path, bool blank, void* param)
void WSUser::SaneImageCallback(const char* path, bool blank, void* param)
{
WSUser* p = (WSUser*)param;
@ -3612,4 +3608,4 @@ namespace ver_2
cJSON_Delete(retJson);
}
}
}
}

View File

@ -25,9 +25,10 @@ namespace ver_2
void PostEventMsg(const HGByte* data, HGUInt dataSize);
virtual void ThreadFunc();
private:
static void SaneEvent2(int code, const char* str, bool err, void* param);
static void SaneImageCallback2(const char* path, bool blank, void* param);
public:
static void SaneEvent(int code, const char* str, bool err, void* param);
static void SaneImageCallback(const char* path, bool blank, void* param);
private:
bool ShakeHand(const std::string& head);
void Pong();
bool SendResponse(const HGByte* data, HGUInt size, HGBool text);