diff --git a/sdk/webservice/ManagerV1.cpp b/sdk/webservice/ManagerV1.cpp index e6d25f83..48a04025 100644 --- a/sdk/webservice/ManagerV1.cpp +++ b/sdk/webservice/ManagerV1.cpp @@ -17,6 +17,7 @@ extern "C" #include #include #include +#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::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::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::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::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::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::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::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::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; diff --git a/sdk/webservice/ManagerV1.h b/sdk/webservice/ManagerV1.h index ae11a925..d64c9cb4 100644 --- a/sdk/webservice/ManagerV1.h +++ b/sdk/webservice/ManagerV1.h @@ -11,6 +11,7 @@ #include "Manager.h" #include "Msg.h" #include +#include #include 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 m_user; std::string m_scanInsertImgName; bool m_scanIsInsert; bool m_scanning; HGEvent m_scanEvent; }; -} \ No newline at end of file +} diff --git a/sdk/webservice/ManagerV2.cpp b/sdk/webservice/ManagerV2.cpp index ccfc5810..d6e347fd 100644 --- a/sdk/webservice/ManagerV2.cpp +++ b/sdk/webservice/ManagerV2.cpp @@ -22,6 +22,7 @@ extern "C" #include #include #include +#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::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::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::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::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::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::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::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::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); diff --git a/sdk/webservice/ManagerV2.h b/sdk/webservice/ManagerV2.h index 043ee953..841001a8 100644 --- a/sdk/webservice/ManagerV2.h +++ b/sdk/webservice/ManagerV2.h @@ -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 m_user; bool m_initDevice; std::vector m_devNameList; @@ -328,4 +318,4 @@ namespace ver_2 int m_bindNameBase; std::list m_saveFilePathList; }; -} \ No newline at end of file +} diff --git a/sdk/webservice/SockIoUser.cpp b/sdk/webservice/SockIoUser.cpp index 27d7f89c..a71d4887 100644 --- a/sdk/webservice/SockIoUser.cpp +++ b/sdk/webservice/SockIoUser.cpp @@ -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; diff --git a/sdk/webservice/SockIoUser.h b/sdk/webservice/SockIoUser.h index 8c659504..ae7797bb 100644 --- a/sdk/webservice/SockIoUser.h +++ b/sdk/webservice/SockIoUser.h @@ -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); }; -} \ No newline at end of file +} diff --git a/sdk/webservice/WSUser.cpp b/sdk/webservice/WSUser.cpp index 3805c591..ac260e22 100644 --- a/sdk/webservice/WSUser.cpp +++ b/sdk/webservice/WSUser.cpp @@ -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); } } -} \ No newline at end of file +} diff --git a/sdk/webservice/WSUser.h b/sdk/webservice/WSUser.h index 0696d6d0..44caeaae 100644 --- a/sdk/webservice/WSUser.h +++ b/sdk/webservice/WSUser.h @@ -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);