HGGitLab

Commit 7e3b95ca authored by luoliangyi's avatar luoliangyi

webservice:将Manager的回调函数和Scan函数独立开

parent ff42a488
......@@ -778,7 +778,6 @@ bool HttpUser::SendResponse(const char* httpVersion, HGUInt errCode, const char*
else
{
assert(0 == size);
assert(NULL == contentType);
sprintf(head, "%s: %s\r\n\r\n",
"Access-Control-Allow-Origin", "null");
......
......@@ -8,6 +8,7 @@
#include "../../imgfmt/HGOfd.h"
#include "../../imgfmt/HGPdf.h"
#include "../../imgfmt/HGTiff.h"
#include "../../imgfmt/HGImgFmt.h"
extern "C"
{
#include "zip.h"
......@@ -190,13 +191,14 @@ void DevParam::Save(const std::string& cfgPath)
Manager::Manager(class MsgLoop* loop)
{
m_loop = loop;
HGBase_CreateLock(&m_lock);
m_devName.clear();
m_devHandle = NULL;
m_scanEvent = NULL;
m_scanParam = NULL;
m_scanInsertImgName.clear();
m_scanIsInsert = false;
m_scanEvent = NULL;
m_scanParam = NULL;
m_scanning = false;
SANE_Int version_code = 0;
......@@ -217,6 +219,9 @@ Manager::~Manager()
}
sane_exit();
HGBase_DestroyLock(m_lock);
m_lock = NULL;
}
void Manager::OpenDev(const OpenDevParam* param)
......@@ -259,10 +264,26 @@ void Manager::CloseDev(const CloseDevParam* param)
m_devName.clear();
}
bool Manager::Scan(const std::string& insertImgName, bool isInsert, ScanEvent event, void* param)
void Manager::SetScanEvent(ScanEvent event, void* param)
{
assert(NULL != event && NULL != param);
HGBase_EnterLock(m_lock);
m_scanEvent = event;
m_scanParam = param;
HGBase_LeaveLock(m_lock);
}
void Manager::ResetScanEvent()
{
HGBase_EnterLock(m_lock);
m_scanEvent = NULL;
m_scanParam = NULL;
HGBase_LeaveLock(m_lock);
}
bool Manager::Scan(const std::string& insertImgName, bool isInsert)
{
if (m_scanning)
{
return false;
......@@ -273,9 +294,6 @@ bool Manager::Scan(const std::string& insertImgName, bool isInsert, ScanEvent ev
{
m_scanInsertImgName = insertImgName;
m_scanIsInsert = isInsert;
m_scanEvent = event;
m_scanParam = param;
if (SANE_STATUS_GOOD == sane_start(m_devHandle))
{
m_scanning = true;
......@@ -285,8 +303,6 @@ bool Manager::Scan(const std::string& insertImgName, bool isInsert, ScanEvent ev
{
m_scanInsertImgName.clear();
m_scanIsInsert = false;
m_scanEvent = NULL;
m_scanParam = NULL;
}
}
......@@ -303,8 +319,6 @@ bool Manager::StopScan()
m_scanInsertImgName.clear();
m_scanIsInsert = false;
m_scanEvent = NULL;
m_scanParam = NULL;
}
return true;
......@@ -312,6 +326,12 @@ bool Manager::StopScan()
bool Manager::GetCurDevId(std::string& devId)
{
devId.clear();
if (m_scanning)
{
return false;
}
devId = m_devName;
return true;
}
......@@ -319,6 +339,10 @@ bool Manager::GetCurDevId(std::string& devId)
bool Manager::GetDevNames(std::vector<std::string>& devNameList)
{
devNameList.clear();
if (m_scanning)
{
return false;
}
const SANE_Device** device_list;
if (SANE_STATUS_GOOD == sane_get_devices(&device_list, SANE_TRUE))
......@@ -338,6 +362,10 @@ bool Manager::GetImageByDevId(const std::string& devId, std::vector<std::string>
{
imgNameList.clear();
imgBase64List.clear();
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::vector<std::string> fileNameList = GetFileNameList(devId);
......@@ -348,7 +376,7 @@ bool Manager::GetImageByDevId(const std::string& devId, std::vector<std::string>
std::string fileName = filePath + fileNameList[i];
HGImage img = NULL;
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
std::string imgBase64 = "data:image/jpeg;base64,";
......@@ -366,6 +394,12 @@ bool Manager::GetImageByDevId(const std::string& devId, std::vector<std::string>
bool Manager::GetDevParam(const std::string& devId, DevParam& devParam)
{
devParam.Reset();
if (m_scanning)
{
return false;
}
bool ret = false;
if (NULL != m_devHandle)
{
......@@ -419,7 +453,11 @@ bool Manager::GetDevParam(const std::string& devId, DevParam& devParam)
TrimString(stdValue);
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, " valueType=STRING, value=%s", stdValue.c_str());
if (0 == strcmp("颜色模式", title.c_str()) && 0 == strcmp("24位彩色", stdValue.c_str()))
if (0 == strcmp("扫描张数", title.c_str()) && 0 == strcmp("连续扫描", stdValue.c_str()))
m_devParam.autofeeder = true;
else if (0 == strcmp("扫描张数", title.c_str()) && 0 == strcmp("扫描指定张数", stdValue.c_str()))
m_devParam.autofeeder = false;
else if (0 == strcmp("颜色模式", title.c_str()) && 0 == strcmp("24位彩色", stdValue.c_str()))
m_devParam.pixel = 2;
else if (0 == strcmp("颜色模式", title.c_str()) && 0 == strcmp("256级灰度", stdValue.c_str()))
m_devParam.pixel = 1;
......@@ -477,6 +515,11 @@ bool Manager::GetDevParam(const std::string& devId, DevParam& devParam)
bool Manager::SetDevParam(const std::string& devId, const DevParam& devParam)
{
if (m_scanning)
{
return false;
}
m_devParam = devParam;
std::string filePath = GetFilePath(m_devName);
......@@ -528,6 +571,13 @@ bool Manager::SetDevParam(const std::string& devId, const DevParam& devParam)
SANE_Int value = m_devParam.resolution;
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL);
}
else if (0 == strcmp(title.c_str(), "扫描数量"))
{
SANE_Int value = 1;
//if (!m_devParam.autofeeder)
// value = 1;
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL);
}
}
else if (SANE_TYPE_FIXED == desp->type)
{
......@@ -535,7 +585,15 @@ bool Manager::SetDevParam(const std::string& devId, const DevParam& devParam)
}
else if (SANE_TYPE_STRING == desp->type)
{
if (0 == strcmp("颜色模式", title.c_str()))
if (0 == strcmp("扫描张数", title.c_str()))
{
char value[256] = { 0 };
strcpy(value, "连续扫描");
if (!m_devParam.autofeeder)
strcpy(value, "扫描指定张数");
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, (void*)(StdStringToUtf8(value).c_str()), NULL);
}
else if (0 == strcmp("颜色模式", title.c_str()))
{
char value[256] = { 0 };
strcpy(value, "24位彩色");
......@@ -549,10 +607,10 @@ bool Manager::SetDevParam(const std::string& devId, const DevParam& devParam)
{
char value[256] = { 0 };
strcpy(value, "双面");
if (!m_devParam.white && m_devParam.single)
if (m_devParam.single)
strcpy(value, "单面");
else if (m_devParam.white && !m_devParam.single)
strcpy(value, "跳过空白页");
else if (m_devParam.white)
strcpy(value, "跳过空白页(通用)");
sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, (void*)(StdStringToUtf8(value).c_str()), NULL);
}
else if (0 == strcmp("文稿方向", title.c_str()))
......@@ -598,6 +656,10 @@ bool Manager::ExportOfdFile(HGByte** data, HGUInt* size)
{
*data = NULL;
*size = 0;
if (m_scanning)
{
return false;
}
std::string devId;
GetCurDevId(devId);
......@@ -624,7 +686,7 @@ bool Manager::ExportOfdFile(HGByte** data, HGUInt* size)
{
HGImage img = NULL;
std::string fileName = filePath + fileNameList[i];
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
if (HGBASE_ERR_OK == HGImgFmt_SaveJpegImageToOfdImageWriter(writer, img, NULL, 0))
......@@ -650,6 +712,10 @@ bool Manager::ExportPdfFile(HGByte** data, HGUInt* size)
{
*data = NULL;
*size = 0;
if (m_scanning)
{
return false;
}
std::string devId;
GetCurDevId(devId);
......@@ -676,7 +742,7 @@ bool Manager::ExportPdfFile(HGByte** data, HGUInt* size)
{
HGImage img = NULL;
std::string fileName = filePath + fileNameList[i];
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
if (HGBASE_ERR_OK == HGImgFmt_SaveJpegImageToPdfImageWriter(writer, img, NULL, 0))
......@@ -702,6 +768,10 @@ bool Manager::ExportTiffFile(HGByte** data, HGUInt* size)
{
*data = NULL;
*size = 0;
if (m_scanning)
{
return false;
}
std::string devId;
GetCurDevId(devId);
......@@ -728,7 +798,7 @@ bool Manager::ExportTiffFile(HGByte** data, HGUInt* size)
{
HGImage img = NULL;
std::string fileName = filePath + fileNameList[i];
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
if (HGBASE_ERR_OK == HGImgFmt_SaveImageToTiffWriter(writer, img, NULL))
......@@ -754,6 +824,10 @@ bool Manager::ExportZipFile(HGByte** data, HGUInt* size)
{
*data = NULL;
*size = 0;
if (m_scanning)
{
return false;
}
std::string devId;
GetCurDevId(devId);
......@@ -809,12 +883,22 @@ bool Manager::ExportZipFile(HGByte** data, HGUInt* size)
bool Manager::UploadImage(const UploadParam& uploadParam)
{
if (m_scanning)
{
return false;
}
// 打包并上传
return true;
}
bool Manager::SaveImage(const std::string& devId, const std::string& imgName, const std::string& imgBase64)
{
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::string fileName = filePath + imgName;
......@@ -827,6 +911,11 @@ bool Manager::SaveImage(const std::string& devId, const std::string& imgName, co
bool Manager::DeleteImage(const std::string& devId, const std::string& imgName)
{
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::string fileName = filePath + imgName;
......@@ -852,6 +941,11 @@ bool Manager::DeleteImage(const std::string& devId, const std::string& imgName)
bool Manager::DeleteAllImage(const std::string& devId)
{
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::vector<std::string> fileNameList = GetFileNameList(devId);
......@@ -871,6 +965,10 @@ bool Manager::MergeImage(const std::string& devId, bool isHorizontal, const std:
{
imgName.clear();
imgBase64.clear();
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::vector<std::string> fileNameList = GetFileNameList(devId);
......@@ -883,7 +981,7 @@ bool Manager::MergeImage(const std::string& devId, bool isHorizontal, const std:
{
std::string fileName = filePath + fileNameList[index];
HGImage img = NULL;
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
imgList.push_back(img);
}
......@@ -940,12 +1038,12 @@ bool Manager::MergeImage(const std::string& devId, bool isHorizontal, const std:
}
HGChar name[256];
sprintf(name, "%d.jpg", maxIndex + 1);
sprintf(name, "%d.%s", maxIndex + 1, m_devParam.format.c_str());
imgName = name;
HGBase_CreateDir(filePath.c_str());
std::string fileName = filePath + imgName;
HGImgFmt_SaveJpegImage(img, NULL, 0, fileName.c_str());
HGImgFmt_SaveImage(img, 0, NULL, 0, fileName.c_str());
fileNameList.push_back(imgName);
SaveFileNameList(devId, fileNameList);
......@@ -973,6 +1071,13 @@ static bool LowerSort(const std::string &str1, const std::string& str2)
bool Manager::BookSort(const std::string& devId, std::vector<std::string>& imgNameList,
std::vector<std::string>& imgBase64List)
{
imgNameList.clear();
imgBase64List.clear();
if (m_scanning)
{
return false;
}
std::vector<std::string> fileNameList = GetFileNameList(devId);
std::sort(fileNameList.begin(), fileNameList.end(), LowerSort);
SaveFileNameList(devId, fileNameList);
......@@ -982,6 +1087,11 @@ bool Manager::BookSort(const std::string& devId, std::vector<std::string>& imgNa
bool Manager::ExchangeImage(const std::string& devId, int index1, int index2)
{
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::vector<std::string> fileNameList = GetFileNameList(devId);
if (index1 < 0 || index1 >= (int)fileNameList.size() || index2 < 0 || index2 >= (int)fileNameList.size())
......@@ -998,12 +1108,23 @@ bool Manager::ExchangeImage(const std::string& devId, int index1, int index2)
bool Manager::GetLastBetch(std::string& devId)
{
devId.clear();
if (m_scanning)
{
return false;
}
devId = m_devName;
return true;
}
bool Manager::ResetPatchIndex()
{
if (m_scanning)
{
return false;
}
return true;
}
......@@ -1014,12 +1135,16 @@ bool Manager::SplitImage(const std::string& devId, const std::string& imgName, b
imgBase64_1.clear();
imgName2.clear();
imgBase64_2.clear();
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::string fileName = filePath + imgName;
HGImage img = NULL;
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
HGImageInfo imgInfo;
......@@ -1089,12 +1214,12 @@ bool Manager::SplitImage(const std::string& devId, const std::string& imgName, b
}
HGChar name[256];
sprintf(name, "%d.jpg", maxIndex + 1);
sprintf(name, "%d.%s", maxIndex + 1, m_devParam.format.c_str());
std::string imgName = name;
HGBase_CreateDir(filePath.c_str());
std::string fileName = filePath + imgName;
HGImgFmt_SaveJpegImage(newImg, NULL, 0, fileName.c_str());
HGImgFmt_SaveImage(newImg, 0, NULL, 0, fileName.c_str());
fileNameList.push_back(imgName);
SaveFileNameList(devId, fileNameList);
......@@ -1125,6 +1250,12 @@ bool Manager::SplitImage(const std::string& devId, const std::string& imgName, b
bool Manager::GetDevSerialNo(const std::string& devId, std::string& serialNo)
{
serialNo.clear();
if (m_scanning)
{
return false;
}
serialNo = devId;
return true;
}
......@@ -1132,12 +1263,16 @@ bool Manager::GetDevSerialNo(const std::string& devId, std::string& serialNo)
bool Manager::GetImageBase64(const std::string& devId, const std::string& imgName, std::string& imgBase64)
{
imgBase64.clear();
if (m_scanning)
{
return false;
}
std::string filePath = GetFilePath(devId);
std::string fileName = filePath + imgName;
HGImage img = NULL;
HGImgFmt_LoadJpegImage(fileName.c_str(), NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
HGImgFmt_LoadImage(fileName.c_str(), 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != img)
{
imgBase64 = "data:image/jpeg;base64,";
......@@ -1347,6 +1482,11 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
SANE_Device* sane_dev = (SANE_Device*)data;
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "device arrive, name=%s", Utf8ToStdString(sane_dev->name).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_ARRIVE, (void*)sane_dev->name, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
OpenDevParam* openDevParam = new OpenDevParam;
openDevParam->devName = sane_dev->name;
......@@ -1367,6 +1507,11 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
SANE_Device* sane_dev = (SANE_Device*)data;
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "device remove, name=%s", Utf8ToStdString(sane_dev->name).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_REMOVE, (void*)sane_dev->name, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
CloseDevParam* closeDevParam = new CloseDevParam;
closeDevParam->devName = sane_dev->name;
......@@ -1384,22 +1529,32 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
break;
case SANE_EVENT_STATUS:
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_STATUS, msg=%s", Utf8ToStdString((char *)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_STATUS, (void*)data, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
}
break;
case SANE_EVENT_ERROR:
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_ERROR, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_ERROR, (void *)data, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
}
break;
case SANE_EVENT_WORKING:
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING");
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_WORKING, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_WORKING, (void*)data, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
}
break;
case SANE_EVENT_IMAGE_OK:
......@@ -1434,12 +1589,12 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
}
HGChar name[256];
sprintf(name, "%d.jpg", maxIndex + 1);
sprintf(name, "%d.%s", maxIndex + 1, p->m_devParam.format.c_str());
std::string imgName = name;
HGBase_CreateDir(filePath.c_str());
std::string fileName = filePath + imgName;
HGImgFmt_SaveJpegImage(img, NULL, 0, fileName.c_str());
HGImgFmt_SaveImage(img, 0, NULL, 0, fileName.c_str());
if (p->m_scanIsInsert)
{
......@@ -1472,8 +1627,10 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
std::string imgBase64 = "data:image/jpeg;base64,";
imgBase64 += GetBase64(img, 0);
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_IMAGE, (void*)imgName.c_str(), (void *)imgBase64.c_str(), p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
HGBase_DestroyImage(img);
}
......@@ -1481,10 +1638,12 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
break;
case SANE_EVENT_SCAN_FINISHED:
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_SCAN_FINISHED");
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SANE_EVENT_SCAN_FINISHED, msg=%s", Utf8ToStdString((char*)data).c_str());
HGBase_EnterLock(p->m_lock);
if (NULL != p->m_scanEvent)
p->m_scanEvent(SCANEVENT_FINISH, (void*)data, (void*)0, p->m_scanParam);
HGBase_LeaveLock(p->m_lock);
WebMsg msg;
msg.msgId = WEB_MSGID_STOPSCAN;
......
......@@ -10,11 +10,13 @@
#include <vector>
#include <string>
#define SCANEVENT_STATUS 0L
#define SCANEVENT_WORKING 1L
#define SCANEVENT_IMAGE 2L
#define SCANEVENT_FINISH 3L
#define SCANEVENT_ERROR 4L
#define SCANEVENT_ARRIVE 1L
#define SCANEVENT_REMOVE 2L
#define SCANEVENT_STATUS 3L
#define SCANEVENT_WORKING 4L
#define SCANEVENT_IMAGE 5L
#define SCANEVENT_FINISH 6L
#define SCANEVENT_ERROR 7L
struct DevParam
{
......@@ -90,8 +92,13 @@ public:
void OpenDev(const OpenDevParam *param);
// 关闭设备
void CloseDev(const CloseDevParam* param);
// 设置回调
void SetScanEvent(ScanEvent event, void* param);
// 清理回调
void ResetScanEvent();
// 扫描
bool Scan(const std::string& insertImgName, bool isInsert, ScanEvent event, void *param);
bool Scan(const std::string& insertImgName, bool isInsert);
// 停止扫描
bool StopScan();
// 获取当前连接的设备ID
......@@ -153,14 +160,15 @@ private:
private:
class MsgLoop* m_loop;
HGLock m_lock;
std::string m_devName;
SANE_Handle m_devHandle;
DevParam m_devParam;
ScanEvent m_scanEvent;
void* m_scanParam;
std::string m_scanInsertImgName;
bool m_scanIsInsert;
ScanEvent m_scanEvent;
void* m_scanParam;
bool m_scanning;
};
......
......@@ -15,12 +15,12 @@ SockIoUser::SockIoUser(class WebServer* server, HGUInt id, const char* ip, uint1
#endif
: WebUser(server, id, ip, port, sockConn)
{
GetManager()->SetScanEvent(ScanCallback, this);
}
SockIoUser::~SockIoUser()
{
GetManager()->ResetScanEvent();
}
void SockIoUser::HandleCmd(const SockIoCmdParam* param)
......@@ -53,7 +53,7 @@ void SockIoUser::HandleCmd(const SockIoCmdParam* param)
cJSON_Delete(json);
}
bool ret = GetManager()->Scan(imgName, insert, ScanCallback, this);
bool ret = GetManager()->Scan(imgName, insert);
if (!ret)
{
std::string resp = "42[\"error\", \"scan error\"]";
......@@ -446,27 +446,36 @@ void SockIoUser::ScanCallback(HGUInt event, void* value1, void* value2, void* pa
SockIoUser* p = (SockIoUser*)param;
char *resp = NULL;
if (SCANEVENT_WORKING == event)
if (SCANEVENT_ARRIVE == event)
{
resp = new char[256];
sprintf(resp, "42[\"success\", \"%s\"]", (const char*)value1);
}
else if (SCANEVENT_REMOVE == event)
{
}
else if (SCANEVENT_WORKING == event)
{
resp = new char[256];
sprintf(resp, "42[\"event\", \"%s\"]", "scanning...");
sprintf(resp, "42[\"event\", \"%s\"]", "......");
}
else if (SCANEVENT_FINISH == event)
{
resp = new char[256];
sprintf(resp, "42[\"result\", {\"code\":204, \"msg\":\"%s\"}]", "scan finish!");
sprintf(resp, "42[\"result\", {\"code\":204, \"msg\":\"%s\"}]", (const char *)value1);
}
else if (SCANEVENT_ERROR == event)
{
resp = new char[256];
sprintf(resp, "42[\"error\", \"%s\"]", "device error");
sprintf(resp, "42[\"error\", \"%s\"]", (const char*)value1);
}
else if (SCANEVENT_IMAGE == event)
{
const char* imgName = (const char*)value1;
const char* imgBase64 = (const char*)value2;
resp = new char[256 + strlen(imgName) + strlen(imgBase64)];
sprintf(resp, "42[\"image\", {\"imageName\":\"%s\", \"image\":\"%s\"}]", imgName, imgBase64);
sprintf(resp, "42[\"image\", {\"code\":201, \"imageName\":\"%s\", \"image\":\"%s\"}]", imgName, imgBase64);
}
if (NULL != resp)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment