code_app/sdk/webservice/WSUser.cpp

3722 lines
101 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "WSUser.h"
#include "WSServer.h"
#include "ManagerV2.h"
#include "base/HGInfo.h"
#include "base/HGUtility.h"
#include "sha1.h"
#include "base64.h"
#include "HGString.h"
namespace ver_2
{
static int GetJsonIntValue(cJSON* json, const std::string& key, bool *find = NULL)
{
int ret = 0;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_Number)
{
ret = p->valueint;
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static double GetJsonDoubleValue(cJSON* json, const std::string& key, bool* find = NULL)
{
double ret = 0.0;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_Number)
{
ret = p->valuedouble;
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static bool GetJsonBoolValue(cJSON* json, const std::string& key, bool* find = NULL)
{
bool ret = false;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_True || p->type == cJSON_False)
{
ret = (p->type == cJSON_True) ? true : false;
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static std::string GetJsonStringValue(cJSON* json, const std::string& key, bool* find = NULL)
{
std::string ret;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_String)
{
ret = p->valuestring;
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static std::vector<std::string> GetJsonStringListValue(cJSON* json, const std::string& key, bool* find = NULL)
{
std::vector<std::string> ret;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_Array)
{
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (pEx->type == cJSON_String)
ret.push_back(pEx->valuestring);
pEx = pEx->next;
}
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
static std::vector<int> GetJsonIntListValue(cJSON* json, const std::string& key, bool* find = NULL)
{
std::vector<int> ret;
if (NULL != find)
*find = false;
cJSON* p = json->child;
while (NULL != p)
{
if (0 == strcmp(p->string, key.c_str()))
{
if (p->type == cJSON_Array)
{
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (pEx->type == cJSON_Number)
ret.push_back(pEx->valueint);
pEx = pEx->next;
}
if (NULL != find)
*find = true;
}
break;
}
p = p->next;
}
return ret;
}
#if defined(HG_CMP_MSC)
WSUser::WSUser(WebServer* server, HGUInt id, const std::string& ip, uint16_t port, SOCKET sockConn)
#else
WSUser::WSUser(WebServer* server, HGUInt id, const std::string& ip, uint16_t port, int sockConn)
#endif
: WebUser(server, id, ip, port, sockConn)
{
m_initDeviceIden.clear();
m_initDeviceHaveIden = false;
m_startScanIden.clear();
m_startScanHaveIden = false;
m_startScanBlankCheck = false;
m_startScanIsLocalSave = true;
m_startScanIsGetBase64 = false;
GetManager()->AddUser(this);
}
WSUser::~WSUser()
{
GetManager()->RemoveUser(this);
}
ManagerV2* WSUser::GetManager()
{
return ((WSServer*)m_server)->GetManger();
}
void WSUser::HandleCmd(const WSCmdParam* param)
{
assert(NULL != param && m_id == param->usrId);
std::string cmdData((const char*)param->data, param->size);
cJSON* json = cJSON_Parse(cmdData.c_str());
if (NULL != json)
{
std::string func = GetJsonStringValue(json, "func");
std::string iden = GetJsonStringValue(json, "iden");
if ("set_global_config" == func)
{
SetGlobalConfig(json);
}
else if ("get_global_config" == func)
{
GetGlobalConfig(json);
}
else if ("load_local_image" == func)
{
LoadLocalImage(json);
}
else if ("save_local_image" == func)
{
SaveLocalImage(json);
}
else if ("delete_local_file" == func)
{
DeleteLocalFile(json);
}
else if ("clear_global_file_save_path" == func)
{
ClearGlobalFileSavePath(json);
}
else if ("merge_local_image" == func || "merge_base64_image" == func || "merge_image" == func)
{
MergeImage(json, func);
}
else if ("local_make_multi_image" == func || "base64_make_multi_image" == func || "make_multi_image" == func)
{
MakeMultiImage(json, func);
}
else if ("split_local_image" == func || "split_base64_image" == func || "split_image" == func)
{
SplitImage(json, func);
}
else if ("local_make_zip_file" == func || "base64_make_zip_file" == func || "make_zip_file" == func)
{
MakeZipFile(json, func);
}
else if ("local_image_deskew" == func || "base64_image_deskew" == func || "image_deskew" == func)
{
ImageDeskew(json, func);
}
else if ("local_image_add_watermark" == func || "base64_image_add_watermark" == func || "image_add_watermark" == func)
{
ImageAddWatermark(json, func);
}
else if ("local_image_decontamination" == func || "base64_image_decontamination" == func || "image_decontamination" == func)
{
ImageDecontamination(json, func);
}
else if ("local_image_direction_correct" == func || "base64_image_direction_correct" == func || "image_direction_correct" == func)
{
ImageDirectionCorrect(json, func);
}
else if ("local_image_clip" == func || "base64_image_clip" == func || "image_clip" == func)
{
ImageClip(json, func);
}
else if ("upload_image" == func || "upload_local_file" == func || "upload_image_base64" == func)
{
UploadFile(json, func);
}
else if ("init_device" == func)
{
InitDevice(json);
}
else if ("deinit_device" == func)
{
DeinitDevice(json);
}
else if ("is_device_init" == func)
{
IsDeviceInit(json);
}
else if ("get_device_name_list" == func)
{
GetDeviceNameList(json);
}
else if ("open_device" == func)
{
OpenDevice(json);
}
else if ("close_device" == func)
{
CloseDevice(json);
}
else if ("get_device_sn" == func)
{
GetDeviceSN(json);
}
else if ("set_device_param" == func)
{
SetDeviceParam(json);
}
else if ("get_device_param" == func)
{
GetDeviceParam(json);
}
else if ("reset_device_param" == func)
{
ResetDeviceParam(json);
}
else if ("get_curr_device_name" == func)
{
GetCurrDeviceName(json);
}
else if ("start_scan" == func)
{
StartScan(json);
}
else if ("stop_scan" == func)
{
StopScan(json);
}
else if ("is_device_scanning" == func)
{
IsDeviceScanning(json);
}
else if ("get_batch_id_list" == func)
{
GetBatchIdList(json);
}
else if ("open_batch" == func)
{
OpenBatch(json);
}
else if ("delete_batch" == func)
{
DeleteBatch(json);
}
else if ("new_batch" == func)
{
NewBatch(json);
}
else if ("get_curr_batch_id" == func)
{
GetCurrBatchId(json);
}
else if ("modify_batch_id" == func)
{
ModifyBatchId(json);
}
else if ("bind_folder" == func)
{
BindFolder(json);
}
else if ("stop_bind_folder" == func)
{
StopBindFolder(json);
}
else if ("get_image_thumbnail_list" == func)
{
GetImageThumbnailList(json);
}
else if ("get_image_count" == func)
{
GetImageCount(json);
}
else if ("load_image" == func)
{
LoadImage(json);
}
else if ("save_image" == func)
{
SaveImage(json);
}
else if ("insert_local_image" == func)
{
InsertLocalImage(json);
}
else if ("insert_image" == func)
{
InsertImage(json);
}
else if ("modify_image_tag" == func)
{
ModifyImageTag(json);
}
else if ("delete_image" == func)
{
DeleteImage(json);
}
else if ("clear_image_list" == func)
{
ClearImageList(json);
}
else if ("modify_image" == func)
{
ModifyImage(json);
}
else if ("modify_image_by_local" == func)
{
ModifyImageByLocal(json);
}
else if ("move_image" == func)
{
MoveImage(json);
}
else if ("exchange_image" == func)
{
ExchangeImage(json);
}
else if ("image_book_sort" == func)
{
ImageBookSort(json);
}
cJSON_Delete(json);
}
}
void WSUser::HandleEvent(const WSEvtParam* param)
{
assert(NULL != param && m_id == param->usrId);
SendResponse(param->data, param->size, HGTRUE);
}
void WSUser::PostCmdMsg(const HGByte* data, HGUInt dataSize)
{
WSCmdParam* param = new WSCmdParam;
param->svr = (WSServer*)m_server;
param->usrId = m_id;
param->data = new HGByte[dataSize];
param->size = dataSize;
memcpy(param->data, data, dataSize);
HGMsg msg;
msg.id = MSGID_WS_COMMAND;
msg.data = param;
if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg))
{
delete[] param->data;
param->size = 0;
delete param;
}
}
void WSUser::PostEventMsg(const HGByte* data, HGUInt dataSize)
{
WSEvtParam* param = new WSEvtParam;
param->svr = (WSServer*)m_server;
param->usrId = m_id;
param->data = new HGByte[dataSize];
param->size = dataSize;
memcpy(param->data, data, dataSize);
HGMsg msg;
msg.id = MSGID_WS_EVENT;
msg.data = param;
if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg))
{
delete[] param->data;
param->size = 0;
delete param;
}
}
void WSUser::ThreadFunc()
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "WSUser::ThreadFunc");
char chBuffer[2048];
const char* pBuffer = chBuffer;
int nBufferSize = 0;
bool bConnect = false;
unsigned char connectDataTail[4] = { '\r', '\n', '\r', '\n' };
unsigned int connectDataTailLen = 0;
std::string connectData;
uint8_t* pData = NULL;
int nDataSize = 0;
uint8_t* pDataEx = NULL;
int nRemainSize = 0;
uint8_t headData[20];
uint32_t nHeadDataLen = 0;
uint8_t vMask[4];
uint32_t nMaskCount = 0;
bool bHandle = false;
std::vector<uint8_t> vAllData;
while (1)
{
if (0 == nBufferSize)
{
int len = recv(m_sockConn, chBuffer, 2048, 0);
if (len <= 0)
{
// 这里跳出可能是服务器关闭了socketConn或者客户端关闭了socket或者网络断开
PostDisConnectMsg();
break;
}
else
{
pBuffer = chBuffer;
nBufferSize = len;
}
}
assert(nBufferSize > 0);
if (!bConnect)
{
unsigned char b = *pBuffer;
++pBuffer;
--nBufferSize;
connectData.push_back(b);
if (b == connectDataTail[connectDataTailLen])
{
++connectDataTailLen;
}
else
{
connectDataTailLen = 0;
if (b == connectDataTail[connectDataTailLen])
{
++connectDataTailLen;
}
}
if (4 == connectDataTailLen)
{
connectDataTailLen = 0;
bool shakeRet = ShakeHand(connectData);
connectData.clear();
if (!shakeRet)
{
PostDisConnectMsg();
break;
}
bConnect = true;
}
}
else
{
if (NULL == pData)
{
assert(0 == nDataSize);
uint8_t b = *pBuffer;
++pBuffer;
--nBufferSize;
headData[nHeadDataLen] = b;
++nHeadDataLen;
if (1 == nHeadDataLen)
{
if ((0x80 | 0x08) == headData[0]) // 断开连接
{
PostDisConnectMsg();
break;
}
else if ((0x80 | 0x09) == headData[0]) // PING帧
{
//
}
else if ((0x80 | 0x0A) == headData[0]) // PONG帧
{
//
}
else if ((0x00 | 0x01) == headData[0] || (0x00 | 0x02) == headData[0] || (0x00 | 0x00) == headData[0] || (0x80 | 0x00) == headData[0]
|| (0x80 | 0x01) == headData[0] || (0x80 | 0x02) == headData[0]) // 数据帧
{
if ((0x80 | 0x00) == headData[0] || (0x80 | 0x01) == headData[0] || (0x80 | 0x02) == headData[0])
{
// 分片结束
bHandle = true;
}
else
{
// 分片帧
bHandle = false;
}
}
else // 帧错误,断开连接
{
PostDisConnectMsg();
break;
}
}
else if (2 == nHeadDataLen)
{
if (0 == (headData[1] & 0x80)) // 必须经过掩码处理
{
PostDisConnectMsg();
break;
}
if ((0x80 | 0x09) == headData[0]) // PING帧
{
if (0x80 != headData[1])
{
PostDisConnectMsg();
break;
}
}
else if ((0x80 | 0x0A) == headData[0]) // PONG帧
{
if (0x80 != headData[1])
{
PostDisConnectMsg();
break;
}
}
else
{
if ((headData[1] & 0x7F) <= 125)
{
uint32_t nCmdSize = (headData[1] & 0x7F);
nHeadDataLen = 0;
if (0 == nCmdSize)
{
PostDisConnectMsg();
break;
}
nDataSize = nCmdSize;
nRemainSize = nCmdSize;
pData = new uint8_t[nDataSize];
pDataEx = pData;
}
}
}
else if (4 == nHeadDataLen)
{
if ((0x80 | 0x09) == headData[0]) // PING帧
{
//
}
else if ((0x80 | 0x0A) == headData[0]) // PONG帧
{
//
}
else
{
if ((headData[1] & 0x7F) == 126)
{
uint32_t nCmdSize = ntohs(*(uint16_t*)&headData[2]);
nHeadDataLen = 0;
if (0 == nCmdSize)
{
PostDisConnectMsg();
break;
}
nDataSize = nCmdSize;
nRemainSize = nCmdSize;
pData = new uint8_t[nDataSize];
pDataEx = pData;
}
}
}
else if (6 == nHeadDataLen)
{
if ((0x80 | 0x09) == headData[0]) // PING帧
{
nHeadDataLen = 0;
Pong();
}
else if ((0x80 | 0x0A) == headData[0]) // PONG帧
{
nHeadDataLen = 0;
}
}
else if (10 == nHeadDataLen)
{
if ((headData[1] & 0x7F) == 127) // 这里一定会等于127
{
uint32_t nCmdSizeHigh = ntohl(*(uint32_t*)&headData[2]);
uint32_t nCmdSize = ntohl(*(uint32_t*)&headData[6]);
nHeadDataLen = 0;
if ((0 != nCmdSizeHigh) || (0 == nCmdSize))
{
PostDisConnectMsg();
break;
}
nDataSize = nCmdSize;
nRemainSize = nCmdSize;
pData = new uint8_t[nDataSize];
pDataEx = pData;
}
}
}
else
{
if (4 != nMaskCount)
{
uint8_t b = *pBuffer;
++pBuffer;
--nBufferSize;
vMask[nMaskCount] = b;
++nMaskCount;
}
else
{
int nWriteSize = HGMIN(nBufferSize, nRemainSize);
memcpy(pDataEx, pBuffer, nWriteSize);
pBuffer += nWriteSize;
nBufferSize -= nWriteSize;
pDataEx += nWriteSize;
nRemainSize -= nWriteSize;
if (0 == nRemainSize)
{
assert(pDataEx == pData + nDataSize);
for (int i = 0; i < nDataSize; ++i)
{
int j = i % 4;
pData[i] = pData[i] ^ vMask[j];
vAllData.push_back(pData[i]);
}
delete[] pData;
pData = NULL;
nDataSize = 0;
nMaskCount = 0;
if (bHandle)
{
PostCmdMsg(&vAllData[0], (HGUInt)vAllData.size());
bHandle = false;
vAllData.clear();
}
}
}
}
}
}
if (NULL != pData)
{
delete[] pData;
pData = NULL;
nDataSize = 0;
nMaskCount = 0;
}
}
void WSUser::SaneEvent(int code, const char* str, bool err, void* param)
{
WSUser* p = (WSUser*)param;
if (code == SANEEVENT_ARRIVE)
{
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("device_arrive"));
if (p->m_initDeviceHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_initDeviceIden.c_str()));
cJSON_AddItemToObject(retJson, "device_name", cJSON_CreateString(str));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
}
else if (code == SANEEVENT_REMOVE)
{
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("device_remove"));
if (p->m_initDeviceHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_initDeviceIden.c_str()));
cJSON_AddItemToObject(retJson, "device_name", cJSON_CreateString(str));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
}
else if (code == SANEEVENT_WORKING)
{
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("scan_begin"));
if (p->m_startScanHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_startScanIden.c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("scan_info"));
if (p->m_startScanHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_startScanIden.c_str()));
if (err)
cJSON_AddItemToObject(retJson, "is_error", cJSON_CreateTrue());
else
cJSON_AddItemToObject(retJson, "is_error", cJSON_CreateFalse());
cJSON_AddItemToObject(retJson, "info", cJSON_CreateString(str));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
}
else if (code == SANEEVENT_FINISH)
{
cJSON *retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("scan_info"));
if (p->m_startScanHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_startScanIden.c_str()));
if (err)
cJSON_AddItemToObject(retJson, "is_error", cJSON_CreateTrue());
else
cJSON_AddItemToObject(retJson, "is_error", cJSON_CreateFalse());
cJSON_AddItemToObject(retJson, "info", cJSON_CreateString(str));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("scan_end"));
if (p->m_startScanHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_startScanIden.c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
}
}
void WSUser::SaneImageCallback(const char* path, bool blank, void* param)
{
WSUser* p = (WSUser*)param;
std::string base64;
if (p->m_startScanIsGetBase64)
{
std::string errInfo;
p->GetManager()->LoadLocalImage(path, base64, errInfo);
}
cJSON *retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("scan_image"));
if (p->m_startScanHaveIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(p->m_startScanIden.c_str()));
if (p->m_startScanBlankCheck)
{
if (blank)
cJSON_AddItemToObject(retJson, "is_blank", cJSON_CreateTrue());
else
cJSON_AddItemToObject(retJson, "is_blank", cJSON_CreateFalse());
}
if (p->m_startScanIsLocalSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(path).c_str()));
else
HGBase_DeleteFile(path);
if (p->m_startScanIsGetBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(base64.c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
p->PostEventMsg((const HGByte*)resp, (HGUInt)strlen(resp));
free(resp);
}
cJSON_Delete(retJson);
}
}
bool WSUser::ShakeHand(const std::string& head)
{
std::string requestMethod;
std::string requestURIPath;
HttpPairs requestURIQueryInfos;
std::string requestURIFragment;
std::string httpVersion;
HttpPairs headInfos;
HttpHead::AnalysisHead(head, requestMethod, requestURIPath, requestURIQueryInfos,
requestURIFragment, httpVersion, headInfos);
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, head.c_str());
//if (std::string::npos == HttpHead::GetValue(headInfos, "Connection").find("Upgrade"))
// return false;
//if ("websocket" != HttpHead::GetValue(headInfos, "Upgrade"))
// return false;
std::string key = HttpHead::GetValue(headInfos, "Sec-WebSocket-Key");
if (key.empty())
return false;
key += "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
unsigned int message_digest[5];
SHA1 sha;
sha.Reset();
sha << key.c_str();
sha.Result(message_digest);
for (int i = 0; i < 5; ++i)
message_digest[i] = htonl(message_digest[i]);
std::string serverKey = base64_encode((const unsigned char*)message_digest, 20);
std::string handShakeResp = "HTTP/1.1 101 Switching Protocols\r\n";
handShakeResp += "Upgrade: websocket\r\n";
handShakeResp += "Connection: Upgrade\r\n";
handShakeResp += "Sec-WebSocket-Accept:";
handShakeResp += serverKey;
handShakeResp += "\r\n\r\n";
send(m_sockConn, handShakeResp.c_str(), (int)handShakeResp.length(), 0);
return true;
}
void WSUser::Pong()
{
uint8_t vHead[2];
vHead[0] = 0x80 | 0x0A;
vHead[1] = 0;
HGBase_EnterLock(m_cs);
send(m_sockConn, (const char*)vHead, 2, 0);
HGBase_LeaveLock(m_cs);
}
bool WSUser::SendResponse(const HGByte* data, HGUInt size, HGBool text)
{
if (NULL == data || 0 == size)
{
return false;
}
uint32_t nHeadLen = 0;
uint8_t vHead[20] = { 0 };
vHead[0] = text ? (0x80 | 0x01) : (0x80 | 0x02);
if (size <= 125)
{
vHead[1] = (uint8_t)size;
nHeadLen = 2;
}
else if (size <= 0xFFFF)
{
vHead[1] = 126;
uint16_t payloadLength16b = htons((uint16_t)size);
memcpy(&vHead[2], &payloadLength16b, 2);
nHeadLen = 4;
}
else
{
vHead[1] = 127;
vHead[2] = 0;
vHead[3] = 0;
vHead[4] = 0;
vHead[5] = 0;
uint32_t payloadLength32b = htonl(size);
memcpy(&vHead[6], &payloadLength32b, 4);
nHeadLen = 10;
}
HGBase_EnterLock(m_cs);
send(m_sockConn, (const char*)vHead, nHeadLen, 0);
send(m_sockConn, (const char*)data, size, 0);
HGBase_LeaveLock(m_cs);
return true;
}
void WSUser::SetGlobalConfig(cJSON* json)
{
assert(NULL != json);
GlobalConfig cfg;
HGUInt mask = 0;
bool find = false;
cfg.fileSavePath = Utf8ToStdString(GetJsonStringValue(json, "file_save_path", &find));
if (find)
mask |= GlobalConfig::fileSavePathMask;
cfg.fileNamePrefix = Utf8ToStdString(GetJsonStringValue(json, "file_name_prefix", &find));
if (find)
mask |= GlobalConfig::fileNamePrefixMask;
cfg.fileNameMode = GetJsonStringValue(json, "file_name_mode", &find);
if (find)
mask |= GlobalConfig::fileNameModeMask;
cfg.imageFormat = GetJsonStringValue(json, "image_format", &find);
if (find)
mask |= GlobalConfig::imageFormatMask;
cfg.imageJpegQuality = GetJsonIntValue(json, "image_jpeg_quality", &find);
if (find)
mask |= GlobalConfig::imageJpegQualityMask;
cfg.imageTiffCompression = GetJsonStringValue(json, "image_tiff_compression", &find);
if (find)
mask |= GlobalConfig::imageTiffCompressionMask;
cfg.imageTiffJpegQuality = GetJsonIntValue(json, "image_tiff_jpeg_quality", &find);
if (find)
mask |= GlobalConfig::imageTiffJpegQualityMask;
std::string errInfo;
int ret = GetManager()->SetGlobalConfig(cfg, mask, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("set_global_config"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetGlobalConfig(cJSON* json)
{
assert(NULL != json);
GlobalConfig cfg;
std::string errInfo;
int ret = GetManager()->GetGlobalConfig(cfg, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_global_config"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "file_save_path", cJSON_CreateString(StdStringToUtf8(cfg.fileSavePath).c_str()));
cJSON_AddItemToObject(retJson, "file_name_prefix", cJSON_CreateString(StdStringToUtf8(cfg.fileNamePrefix).c_str()));
cJSON_AddItemToObject(retJson, "file_name_mode", cJSON_CreateString(cfg.fileNameMode.c_str()));
cJSON_AddItemToObject(retJson, "image_format", cJSON_CreateString(cfg.imageFormat.c_str()));
cJSON_AddItemToObject(retJson, "image_jpeg_quality", cJSON_CreateNumber(cfg.imageJpegQuality));
cJSON_AddItemToObject(retJson, "image_tiff_compression", cJSON_CreateString(cfg.imageTiffCompression.c_str()));
cJSON_AddItemToObject(retJson, "image_tiff_jpeg_quality", cJSON_CreateNumber(cfg.imageTiffJpegQuality));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::LoadLocalImage(cJSON* json)
{
assert(NULL != json);
std::string imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
std::string imageBase64;
std::string errInfo;
int ret = GetManager()->LoadLocalImage(imagePath, imageBase64, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("load_local_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(imageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::SaveLocalImage(cJSON* json)
{
assert(NULL != json);
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string imagePath;
std::string errInfo;
int ret = GetManager()->SaveLocalImage(imageBase64, false, imagePath, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("save_local_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(imagePath).c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::DeleteLocalFile(cJSON* json)
{
assert(NULL != json);
std::string filePath = Utf8ToStdString(GetJsonStringValue(json, "file_path"));
std::string errInfo;
int ret = GetManager()->DeleteLocalFile(filePath, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("delete_local_file"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ClearGlobalFileSavePath(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->ClearGlobalFileSavePath(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("clear_global_file_save_path"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::UploadFile(cJSON* json, const std::string& func)
{
assert(NULL != json);
std::string filePath;
if ("upload_image" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, filePath, errInfo2);
}
else if ("upload_local_file" == func)
{
filePath = Utf8ToStdString(GetJsonStringValue(json, "file_path"));
}
else if ("upload_image_base64" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, filePath, errInfo2);
}
bool find = false;
std::string remoteFilePath = Utf8ToStdString(GetJsonStringValue(json, "remote_file_path", &find));
if (!find)
{
HGChar fileName[256];
HGBase_GetFileName(filePath.c_str(), fileName, 256);
remoteFilePath.clear();
remoteFilePath += "/";
remoteFilePath += fileName;
}
std::string uploadMode = GetJsonStringValue(json, "upload_mode", &find);
if (!find)
uploadMode = "http";
std::string httpHost = GetJsonStringValue(json, "http_host", &find);
int httpPort = GetJsonIntValue(json, "http_port", &find);
if (!find)
httpPort = 80;
std::string httpPath = GetJsonStringValue(json, "http_path", &find);
if (!find)
httpPath = "/upload.cgi";
std::string ftpUser = GetJsonStringValue(json, "ftp_user", &find);
std::string ftpPassword = GetJsonStringValue(json, "ftp_password", &find);
std::string ftpHost = GetJsonStringValue(json, "ftp_host", &find);
int ftpPort = GetJsonIntValue(json, "ftp_port", &find);
if (!find)
ftpPort = 21;
std::string errInfo;
int ret = GetManager()->UploadLocalFile(filePath, remoteFilePath, uploadMode, httpHost, httpPort, httpPath,
ftpUser, ftpPassword, ftpHost, ftpPort, errInfo);
if ("upload_image" == func || "upload_image_base64" == func)
{
HGBase_DeleteFile(filePath.c_str());
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::MergeImage(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
std::string mode = GetJsonStringValue(json, "mode", &find);
if (!find)
mode = "horz";
std::string align = GetJsonStringValue(json, "align", &find);
if (!find)
align = "center";
int interval = GetJsonIntValue(json, "interval", &find);
if (!find)
interval = 0;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::vector<std::string> imagePathList;
if ("merge_image" == func)
{
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
for (int i = 0; i < (int)imageIndexList.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveImage(imageIndexList[i], true, imagePath, errInfo2);
imagePathList.push_back(imagePath);
}
}
else if ("merge_local_image" == func)
{
imagePathList = GetJsonStringListValue(json, "image_path_list");
for (int i = 0; i < (int)imagePathList.size(); ++i)
imagePathList[i] = Utf8ToStdString(imagePathList[i]);
}
else if ("merge_base64_image" == func)
{
std::vector<std::string> imageBase64List = GetJsonStringListValue(json, "image_base64_list");
for (int i = 0; i < (int)imageBase64List.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64List[i], true, imagePath, errInfo2);
imagePathList.push_back(imagePath);
}
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->MergeLocalImage(imagePathList, mode, align, interval, !localSave, outImagePath, errInfo);
if ("merge_image" == func || "merge_base64_image" == func)
{
for (int i = 0; i < (int)imagePathList.size(); ++i)
{
HGBase_DeleteFile(imagePathList[i].c_str());
}
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::MakeMultiImage(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
std::string format = GetJsonStringValue(json, "format", &find);
if (!find)
format = "tif";
std::string tiffCompression = GetJsonStringValue(json, "tiff_compression", &find);
if (!find)
tiffCompression = "lzw";
int tiffJpegQuality = GetJsonIntValue(json, "tiff_jpeg_quality", &find);
if (!find)
tiffJpegQuality = 80;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::vector<std::string> imagePathList;
if ("make_multi_image" == func)
{
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
for (int i = 0; i < (int)imageIndexList.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveImage(imageIndexList[i], true, imagePath, errInfo2);
imagePathList.push_back(imagePath);
}
}
else if ("local_make_multi_image" == func)
{
imagePathList = GetJsonStringListValue(json, "image_path_list");
for (int i = 0; i < (int)imagePathList.size(); ++i)
imagePathList[i] = Utf8ToStdString(imagePathList[i]);
}
else if ("base64_make_multi_image" == func)
{
std::vector<std::string> imageBase64List = GetJsonStringListValue(json, "image_base64_list");
for (int i = 0; i < (int)imageBase64List.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64List[i], true, imagePath, errInfo2);
imagePathList.push_back(imagePath);
}
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalMakeMultiImage(imagePathList, format, tiffCompression, tiffJpegQuality, !localSave, outImagePath, errInfo);
if ("make_multi_image" == func || "base64_make_multi_image" == func)
{
for (int i = 0; i < (int)imagePathList.size(); ++i)
{
HGBase_DeleteFile(imagePathList[i].c_str());
}
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::SplitImage(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
std::string mode = GetJsonStringValue(json, "mode", &find);
if (!find)
mode = "horz";
int location = GetJsonIntValue(json, "location", &find);
if (!find)
location = 0;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("split_image" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("split_local_image" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("split_base64_image" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::vector<std::string> outImagePathList;
std::string errInfo;
int ret = GetManager()->SplitLocalImage(imagePath, mode, location, !localSave, outImagePathList, errInfo);
if ("split_image" == func || "split_base64_image" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::vector<std::string> outImageBase64List;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
for (int i = 0; i < (int)outImagePathList.size(); ++i)
{
std::string outImageBase64;
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePathList[i], outImageBase64, errInfo2);
outImageBase64List.push_back(outImageBase64);
}
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
{
cJSON* imgPathList = cJSON_CreateArray();
for (int i = 0; i < (int)outImagePathList.size(); ++i)
cJSON_AddItemToArray(imgPathList, cJSON_CreateString(StdStringToUtf8(outImagePathList[i]).c_str()));
cJSON_AddItemToObject(retJson, "image_path_list", imgPathList);
}
else
{
for (int i = 0; i < (int)outImagePathList.size(); ++i)
HGBase_DeleteFile(outImagePathList[i].c_str());
}
if (getBase64)
{
cJSON* imgBase64List = cJSON_CreateArray();
for (int i = 0; i < (int)outImageBase64List.size(); ++i)
cJSON_AddItemToArray(imgBase64List, cJSON_CreateString(outImageBase64List[i].c_str()));
cJSON_AddItemToObject(retJson, "image_base64_list", imgBase64List);
}
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::MakeZipFile(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::vector<std::string> filePathList;
std::vector<std::string> nameList;
if ("make_zip_file" == func)
{
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
for (int i = 0; i < (int)imageIndexList.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveImage(imageIndexList[i], true, imagePath, errInfo2);
filePathList.push_back(imagePath);
HGChar suffix[256];
HGBase_GetFileSuffix(imagePath.c_str(), suffix, 256);
char name[256];
sprintf(name, "%d.%s", imageIndexList[i], suffix);
nameList.push_back(name);
}
}
else if ("local_make_zip_file" == func)
{
filePathList = GetJsonStringListValue(json, "file_path_list");
for (int i = 0; i < (int)filePathList.size(); ++i)
filePathList[i] = Utf8ToStdString(filePathList[i]);
}
else if ("base64_make_zip_file" == func)
{
std::vector<std::string> imageBase64List = GetJsonStringListValue(json, "image_base64_list");
for (int i = 0; i < (int)imageBase64List.size(); ++i)
{
std::string imagePath;
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64List[i], true, imagePath, errInfo2);
filePathList.push_back(imagePath);
HGChar suffix[256];
HGBase_GetFileSuffix(imagePath.c_str(), suffix, 256);
char name[256];
sprintf(name, "%d.%s", i, suffix);
nameList.push_back(name);
}
}
std::string zipPath = GetJsonStringValue(json, "zip_path");
std::string outZipPath;
std::string errInfo;
int ret = GetManager()->LocalMakeZipFile(filePathList, nameList, zipPath, !localSave, outZipPath, errInfo);
if ("make_zip_file" == func || "base64_make_zip_file" == func)
{
for (int i = 0; i < (int)filePathList.size(); ++i)
{
HGBase_DeleteFile(filePathList[i].c_str());
}
}
std::string outZipBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
GetManager()->LoadBase64(outZipPath, outZipBase64);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "zip_path", cJSON_CreateString(StdStringToUtf8(outZipPath).c_str()));
else
HGBase_DeleteFile(outZipPath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "zip_base64", cJSON_CreateString(outZipBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageDeskew(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("image_deskew" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("local_image_deskew" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("base64_image_deskew" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalImageDeskew(imagePath, true, true, true, 0, 0, !localSave, outImagePath, errInfo);
if ("image_deskew" == func || "base64_image_deskew" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageAddWatermark(cJSON* json, const std::string& func)
{
assert(NULL != json);
std::string text = Utf8ToStdString(GetJsonStringValue(json, "text"));
bool find;
std::string textColor = GetJsonStringValue(json, "text_color", &find);
if (!find)
textColor = "#000000";
int textOpacity = GetJsonIntValue(json, "text_opacity", &find);
if (!find)
textOpacity = 255;
std::string textPos = GetJsonStringValue(json, "text_pos", &find);
if (!find)
textPos = "location";
int marginLeft = GetJsonIntValue(json, "margin_left", &find);
int marginTop = GetJsonIntValue(json, "margin_top", &find);
int marginRight = GetJsonIntValue(json, "margin_right", &find);
int marginBottom = GetJsonIntValue(json, "margin_bottom", &find);
int locationX = GetJsonIntValue(json, "location_x", &find);
int locationY = GetJsonIntValue(json, "location_y", &find);
std::string fontName = Utf8ToStdString(GetJsonStringValue(json, "font_name", &find));
if (!find)
fontName = "宋体";
int fontSize = GetJsonIntValue(json, "font_size", &find);
if (!find)
fontSize = 20;
bool fontBold = GetJsonBoolValue(json, "font_bold");
bool fontUnderline = GetJsonBoolValue(json, "font_underline");
bool fontItalic = GetJsonBoolValue(json, "font_italic");
bool fontStrikeout = GetJsonBoolValue(json, "font_strikeout");
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("image_add_watermark" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("local_image_add_watermark" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("base64_image_add_watermark" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalImageAddWatermark(imagePath, text, textColor, textOpacity, textPos,
marginLeft, marginTop, marginRight, marginBottom, locationX, locationY, fontName, fontSize,
fontBold, fontUnderline, fontItalic, fontStrikeout, !localSave, outImagePath, errInfo);
if ("image_add_watermark" == func || "base64_image_add_watermark" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageDecontamination(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
std::string mode = GetJsonStringValue(json, "mode", &find);
if (!find)
mode = "inside";
std::string color = GetJsonStringValue(json, "color", &find);
int x = GetJsonIntValue(json, "x");
int y = GetJsonIntValue(json, "y");
int width = GetJsonIntValue(json, "width");
int height = GetJsonIntValue(json, "height");
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("image_decontamination" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("local_image_decontamination" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("base64_image_decontamination" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalImageDecontamination(imagePath, mode, color, x, y, width, height, !localSave, outImagePath, errInfo);
if ("image_decontamination" == func || "base64_image_decontamination" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageDirectionCorrect(cJSON* json, const std::string& func)
{
assert(NULL != json);
bool find = false;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("image_direction_correct" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("local_image_direction_correct" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("base64_image_direction_correct" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalImageDirectionCorrect(imagePath, !localSave, outImagePath, errInfo);
if ("image_direction_correct" == func || "base64_image_direction_correct" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageClip(cJSON* json, const std::string& func)
{
assert(NULL != json);
int x = GetJsonIntValue(json, "x");
int y = GetJsonIntValue(json, "y");
int width = GetJsonIntValue(json, "width");
int height = GetJsonIntValue(json, "height");
bool find = false;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
std::string imagePath;
if ("image_clip" == func)
{
int imageIndex = GetJsonIntValue(json, "image_index");
std::string errInfo2;
GetManager()->SaveImage(imageIndex, true, imagePath, errInfo2);
}
else if ("local_image_clip" == func)
{
imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
}
else if ("base64_image_clip" == func)
{
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo2;
GetManager()->SaveLocalImage(imageBase64, true, imagePath, errInfo2);
}
std::string outImagePath;
std::string errInfo;
int ret = GetManager()->LocalImageClip(imagePath, x, y, width, height, !localSave, outImagePath, errInfo);
if ("image_clip" == func || "base64_image_clip" == func)
{
HGBase_DeleteFile(imagePath.c_str());
}
std::string outImageBase64;
bool getBase64 = GetJsonBoolValue(json, "get_base64");
if (0 == ret && getBase64)
{
std::string errInfo2;
GetManager()->LoadLocalImage(outImagePath, outImageBase64, errInfo2);
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString(func.c_str()));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
if (localSave)
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(outImagePath).c_str()));
else
HGBase_DeleteFile(outImagePath.c_str());
if (getBase64)
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(outImageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::InitDevice(cJSON* json)
{
assert(NULL != json);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
if (!GetManager()->IsDeviceInit())
{
m_initDeviceIden = iden;
m_initDeviceHaveIden = findIden;
}
std::string errInfo;
int ret = GetManager()->InitDevice(errInfo);
if (0 != ret)
{
m_initDeviceIden.clear();
m_initDeviceHaveIden = false;
}
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("init_device"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::DeinitDevice(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->DeinitDevice(errInfo);
m_initDeviceIden.clear();
m_initDeviceHaveIden = false;
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("deinit_device"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::IsDeviceInit(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->IsDeviceInit() ? 0 : -1;
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("is_device_init"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetDeviceNameList(cJSON* json)
{
assert(NULL != json);
std::vector<std::string> devNameList;
std::string errInfo;
int ret = GetManager()->GetDeviceNameList(devNameList, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_device_name_list"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON* deviceNameList = cJSON_CreateArray();
for (int i = 0; i < (int)devNameList.size(); ++i)
cJSON_AddItemToArray(deviceNameList, cJSON_CreateString(devNameList[i].c_str()));
cJSON_AddItemToObject(retJson, "device_name_list", deviceNameList);
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::OpenDevice(cJSON* json)
{
assert(NULL != json);
bool find = false;
std::string devName = GetJsonStringValue(json, "device_name", &find);
if (!find)
{
std::vector<std::string> devNameList;
std::string errInfo;
GetManager()->GetDeviceNameList(devNameList, errInfo);
if (!devNameList.empty())
devName = devNameList[0];
}
std::string errInfo;
int ret = GetManager()->OpenDevice(devName, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("open_device"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::CloseDevice(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->CloseDevice(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("close_device"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetDeviceSN(cJSON* json)
{
assert(NULL != json);
std::string sn;
std::string errInfo;
int ret = GetManager()->GetDeviceSN(sn, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_device_sn"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
cJSON_AddItemToObject(retJson, "sn", cJSON_CreateString(StdStringToUtf8(sn).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::SetDeviceParam(cJSON* json)
{
assert(NULL != json);
std::vector<DeviceParam> devParams;
cJSON* p = json->child;
while (NULL != p)
{
if (0 != strcmp(p->string, "device_param"))
{
p = p->next;
continue;
}
if (p->type != cJSON_Array)
{
break;
}
cJSON* pEx = p->child;
while (NULL != pEx)
{
if (pEx->type != cJSON_Object)
{
pEx = pEx->next;
continue;
}
DeviceParam devParam;
cJSON* pEx2 = pEx->child;
while (NULL != pEx2)
{
if (0 == strcmp(pEx2->string, "name") && pEx2->type == cJSON_String)
{
devParam.title = pEx2->valuestring;
}
else if (0 == strcmp(pEx2->string, "value"))
{
if (pEx2->type == cJSON_String)
devParam.stringValue = pEx2->valuestring;
else if (pEx2->type == cJSON_Number)
{
devParam.intValue = pEx2->valueint;
devParam.doubleValue = pEx2->valuedouble;
}
else if (pEx2->type == cJSON_True)
devParam.boolValue = true;
else if (pEx2->type == cJSON_False)
devParam.boolValue = false;
}
pEx2 = pEx2->next;
}
devParams.push_back(devParam);
pEx = pEx->next;
}
break;
}
std::string errInfo;
int ret = GetManager()->SetDeviceParam(devParams, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("set_device_param"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetDeviceParam(cJSON* json)
{
assert(NULL != json);
std::vector<DeviceParamsGroup> devParams;
std::string errInfo;
int ret = GetManager()->GetDeviceParam(devParams, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_device_param"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON* deviceParams = cJSON_CreateArray();
for (int k = 0; k < (int)devParams.size(); ++k)
{
cJSON* groupParams = cJSON_CreateObject();
cJSON_AddItemToObject(groupParams, "group_name", cJSON_CreateString(devParams[k].groupTitle.c_str()));
cJSON* groupParam = cJSON_CreateArray();
for (int i = 0; i < (int)devParams[k].devParams.size(); ++i)
{
cJSON* param = cJSON_CreateObject();
cJSON_AddItemToObject(param, "name", cJSON_CreateString(devParams[k].devParams[i].title.c_str()));
if (1 == devParams[k].devParams[i].valueType)
{
assert(1 == devParams[k].devParams[i].rangeType);
cJSON_AddItemToObject(param, "value_type", cJSON_CreateString("string"));
cJSON_AddItemToObject(param, "value", cJSON_CreateString(devParams[k].devParams[i].stringValue.c_str()));
cJSON* valueList = cJSON_CreateArray();
for (int j = 0; j < (int)devParams[k].devParams[i].stringValueList.size(); ++j)
cJSON_AddItemToArray(valueList, cJSON_CreateString(devParams[k].devParams[i].stringValueList[j].c_str()));
cJSON_AddItemToObject(param, "range_type", cJSON_CreateString("list"));
cJSON_AddItemToObject(param, "value_list", valueList);
}
else if (2 == devParams[k].devParams[i].valueType)
{
cJSON_AddItemToObject(param, "value_type", cJSON_CreateString("int"));
cJSON_AddItemToObject(param, "value", cJSON_CreateNumber(devParams[k].devParams[i].intValue));
if (2 == devParams[k].devParams[i].rangeType)
{
cJSON* valueList = cJSON_CreateArray();
for (int j = 0; j < (int)devParams[k].devParams[i].intValueList.size(); ++j)
cJSON_AddItemToArray(valueList, cJSON_CreateNumber(devParams[k].devParams[i].intValueList[j]));
cJSON_AddItemToObject(param, "range_type", cJSON_CreateString("list"));
cJSON_AddItemToObject(param, "value_list", valueList);
}
else if (4 == devParams[k].devParams[i].rangeType)
{
cJSON_AddItemToObject(param, "range_type", cJSON_CreateString("min_max"));
cJSON_AddItemToObject(param, "value_min", cJSON_CreateNumber(devParams[k].devParams[i].intValueMin));
cJSON_AddItemToObject(param, "value_max", cJSON_CreateNumber(devParams[k].devParams[i].intValueMax));
}
else
{
assert(0 == devParams[k].devParams[i].rangeType);
}
}
else if (3 == devParams[k].devParams[i].valueType)
{
cJSON_AddItemToObject(param, "value_type", cJSON_CreateString("double"));
cJSON_AddItemToObject(param, "value", cJSON_CreateNumber(devParams[k].devParams[i].doubleValue));
if (3 == devParams[k].devParams[i].rangeType)
{
cJSON* valueList = cJSON_CreateArray();
for (int j = 0; j < (int)devParams[k].devParams[i].doubleValueList.size(); ++j)
cJSON_AddItemToArray(valueList, cJSON_CreateNumber(devParams[k].devParams[i].doubleValueList[j]));
cJSON_AddItemToObject(param, "range_type", cJSON_CreateString("list"));
cJSON_AddItemToObject(param, "value_list", valueList);
}
else if (5 == devParams[k].devParams[i].rangeType)
{
cJSON_AddItemToObject(param, "range_type", cJSON_CreateString("min_max"));
cJSON_AddItemToObject(param, "value_min", cJSON_CreateNumber(devParams[k].devParams[i].doubleValueMin));
cJSON_AddItemToObject(param, "value_max", cJSON_CreateNumber(devParams[k].devParams[i].doubleValueMax));
}
else
{
assert(0 == devParams[k].devParams[i].rangeType);
}
}
else
{
assert(4 == devParams[k].devParams[i].valueType);
assert(0 == devParams[k].devParams[i].rangeType);
cJSON_AddItemToObject(param, "value_type", cJSON_CreateString("bool"));
if (devParams[k].devParams[i].boolValue)
cJSON_AddItemToObject(param, "value", cJSON_CreateTrue());
else
cJSON_AddItemToObject(param, "value", cJSON_CreateFalse());
}
cJSON_AddItemToArray(groupParam, param);
}
cJSON_AddItemToObject(groupParams, "group_param", groupParam);
cJSON_AddItemToArray(deviceParams, groupParams);
}
cJSON_AddItemToObject(retJson, "device_param", deviceParams);
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ResetDeviceParam(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->ResetDeviceParam(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("reset_device_param"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetCurrDeviceName(cJSON* json)
{
assert(NULL != json);
std::string devName;
std::string errInfo;
int ret = GetManager()->GetCurrDeviceName(devName, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_curr_device_name"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "device_name", cJSON_CreateString(devName.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::StartScan(cJSON* json)
{
assert(NULL != json);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
bool find = false;
bool blankCheck = GetJsonBoolValue(json, "blank_check", &find);
if (!find)
blankCheck = false;
bool localSave = GetJsonBoolValue(json, "local_save", &find);
if (!find)
localSave = true;
bool getBase64 = GetJsonBoolValue(json, "get_base64", &find);
if (!find)
getBase64 = false;
if (!GetManager()->IsScanning())
{
m_startScanIden = iden;
m_startScanHaveIden = findIden;
m_startScanBlankCheck = blankCheck;
m_startScanIsLocalSave = localSave;
m_startScanIsGetBase64 = getBase64;
}
std::string errInfo;
int ret = GetManager()->StartScan(blankCheck, !localSave, errInfo);
if (0 != ret)
{
m_startScanIden.clear();
m_startScanHaveIden = false;
m_startScanBlankCheck = false;
m_startScanIsLocalSave = true;
m_startScanIsGetBase64 = false;
}
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("start_scan"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::StopScan(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->StopScan(errInfo);
m_startScanIden.clear();
m_startScanHaveIden = false;
m_startScanBlankCheck = false;
m_startScanIsLocalSave = true;
m_startScanIsGetBase64 = false;
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("stop_scan"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::IsDeviceScanning(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->IsScanning() ? 0 : -1;
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("is_device_scanning"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetBatchIdList(cJSON* json)
{
assert(NULL != json);
std::vector<std::string> batchIdList;
std::string errInfo;
int ret = GetManager()->GetBatchIdList(batchIdList, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_batch_id_list"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON* idList = cJSON_CreateArray();
for (int i = 0; i < (int)batchIdList.size(); ++i)
cJSON_AddItemToArray(idList, cJSON_CreateString(batchIdList[i].c_str()));
cJSON_AddItemToObject(retJson, "batch_id_list", idList);
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::OpenBatch(cJSON* json)
{
assert(NULL != json);
bool find = false;
std::string batchId = GetJsonStringValue(json, "batch_id", &find);
if (!find)
{
std::vector<std::string> batchIdList;
std::string errInfo;
GetManager()->GetBatchIdList(batchIdList, errInfo);
if (!batchIdList.empty())
batchId = batchIdList[batchIdList.size() - 1];
}
std::string errInfo;
int ret = GetManager()->OpenBatch(batchId, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("open_batch"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::DeleteBatch(cJSON* json)
{
assert(NULL != json);
std::string batchId = GetJsonStringValue(json, "batch_id");
std::string errInfo;
int ret = GetManager()->DeleteBatch(batchId, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("delete_batch"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::NewBatch(cJSON* json)
{
assert(NULL != json);
int ret;
std::string newBatchId;
std::string errInfo;
bool find = false;
std::string batchId = GetJsonStringValue(json, "batch_id", &find);
if (!find)
{
while (1)
{
HGChar uuid[256];
HGBase_GetUuid(uuid, 256);
batchId = std::string(uuid, 6);
ret = GetManager()->NewBatch(batchId, errInfo);
if (0 == ret)
{
newBatchId = batchId;
break;
}
}
}
else
{
ret = GetManager()->NewBatch(batchId, errInfo);
if (0 == ret)
newBatchId = batchId;
}
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("new_batch"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "batch_id", cJSON_CreateString(newBatchId.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetCurrBatchId(cJSON* json)
{
assert(NULL != json);
std::string batchId;
std::string errInfo;
int ret = GetManager()->GetCurrBatchId(batchId, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_curr_batch_id"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "batch_id", cJSON_CreateString(batchId.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ModifyBatchId(cJSON* json)
{
assert(NULL != json);
bool find = false;
std::string batchId = GetJsonStringValue(json, "batch_id", &find);
if (!find)
{
std::string errInfo;
GetManager()->GetCurrBatchId(batchId, errInfo);
}
std::string newBatchId = GetJsonStringValue(json, "new_batch_id");
std::string errInfo;
int ret = GetManager()->ModifyBatchId(batchId, newBatchId, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("modify_batch_id"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::BindFolder(cJSON* json)
{
assert(NULL != json);
std::string folder = Utf8ToStdString(GetJsonStringValue(json, "folder"));
bool find = false;
std::string nameMode = GetJsonStringValue(json, "name_mode");
if (!find)
nameMode = "order";
int nameWidth = GetJsonIntValue(json, "name_width", &find);
if (!find)
nameWidth = 1;
int nameBase = GetJsonIntValue(json, "name_base", &find);
if (!find)
nameBase = 0;
std::string errInfo;
int ret = GetManager()->BindFolder(folder, nameMode, nameWidth, nameBase, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("bind_folder"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::StopBindFolder(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->StopBindFolder(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("stop_bind_folder"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetImageThumbnailList(cJSON* json)
{
assert(NULL != json);
std::vector<ImageThumbInfo> imageThumbList;
std::string errInfo;
int ret = GetManager()->GetImageThumbnailList(imageThumbList, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_image_thumbnail_list"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON* thumbList = cJSON_CreateArray();
for (int i = 0; i < (int)imageThumbList.size(); ++i)
{
cJSON* thumb = cJSON_CreateObject();
cJSON_AddItemToObject(thumb, "image_tag", cJSON_CreateString(imageThumbList[i].tag.c_str()));
cJSON_AddItemToObject(thumb, "image_base64", cJSON_CreateString(imageThumbList[i].thumbBase64.c_str()));
cJSON_AddItemToArray(thumbList, thumb);
}
cJSON_AddItemToObject(retJson, "image_thumbnail_list", thumbList);
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::GetImageCount(cJSON* json)
{
assert(NULL != json);
int imageCount = 0;
std::string errInfo;
int ret = GetManager()->GetImageCount(imageCount, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("get_image_count"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "image_count", cJSON_CreateNumber(imageCount));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::LoadImage(cJSON* json)
{
assert(NULL != json);
int imageIndex = GetJsonIntValue(json, "image_index");
std::string imageTag, imageBase64;
std::string errInfo;
int ret = GetManager()->LoadImage(imageIndex, imageTag, imageBase64, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("load_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "image_tag", cJSON_CreateString(imageTag.c_str()));
cJSON_AddItemToObject(retJson, "image_base64", cJSON_CreateString(imageBase64.c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::SaveImage(cJSON* json)
{
assert(NULL != json);
int imageIndex = GetJsonIntValue(json, "image_index");
std::string imagePath;
std::string errInfo;
int ret = GetManager()->SaveImage(imageIndex, false, imagePath, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("save_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
else
{
cJSON_AddItemToObject(retJson, "image_path", cJSON_CreateString(StdStringToUtf8(imagePath).c_str()));
}
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::InsertLocalImage(cJSON* json)
{
assert(NULL != json);
std::string imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
bool find = false;
int insertPos = GetJsonIntValue(json, "insert_pos", &find);
if (!find)
insertPos = -1;
std::string imageTag = GetJsonStringValue(json, "image_tag");
std::string errInfo;
int ret = GetManager()->InsertLocalImage(imagePath, insertPos, imageTag, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("insert_local_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::InsertImage(cJSON* json)
{
assert(NULL != json);
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
bool find = false;
int insertPos = GetJsonIntValue(json, "insert_pos", &find);
if (!find)
insertPos = -1;
std::string imageTag = GetJsonStringValue(json, "image_tag");
std::string errInfo;
int ret = GetManager()->InsertImage(imageBase64, insertPos, imageTag, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("insert_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ModifyImageTag(cJSON* json)
{
assert(NULL != json);
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
std::vector<std::string> imageTagList = GetJsonStringListValue(json, "image_tag_list");
std::string errInfo;
int ret = GetManager()->ModifyImageTag(imageIndexList, imageTagList, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("modify_image_tag"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::DeleteImage(cJSON* json)
{
assert(NULL != json);
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
std::string errInfo;
int ret = GetManager()->DeleteImage(imageIndexList, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("delete_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ClearImageList(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->ClearImageList(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("clear_image_list"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ModifyImage(cJSON* json)
{
assert(NULL != json);
int imageIndex = GetJsonIntValue(json, "image_index");
std::string imageBase64 = GetJsonStringValue(json, "image_base64");
std::string errInfo;
int ret = GetManager()->ModifyImage(imageIndex, imageBase64, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("modify_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ModifyImageByLocal(cJSON* json)
{
assert(NULL != json);
int imageIndex = GetJsonIntValue(json, "image_index");
std::string imagePath = Utf8ToStdString(GetJsonStringValue(json, "image_path"));
std::string errInfo;
int ret = GetManager()->ModifyImageByLocal(imageIndex, imagePath, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("modify_image_by_local"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::MoveImage(cJSON* json)
{
assert(NULL != json);
std::vector<int> imageIndexList = GetJsonIntListValue(json, "image_index_list");
bool find = false;
std::string mode = GetJsonStringValue(json, "mode", &find);
if (!find)
mode = "index";
int target = GetJsonIntValue(json, "target");
std::string errInfo;
int ret = GetManager()->MoveImage(imageIndexList, mode, target, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("move_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ExchangeImage(cJSON* json)
{
assert(NULL != json);
int imageIndex1 = GetJsonIntValue(json, "image_index_1");
int imageIndex2 = GetJsonIntValue(json, "image_index_2");
std::string errInfo;
int ret = GetManager()->ExchangeImage(imageIndex1, imageIndex2, errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("exchange_image"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
void WSUser::ImageBookSort(cJSON* json)
{
assert(NULL != json);
std::string errInfo;
int ret = GetManager()->ImageBookSort(errInfo);
bool findIden = false;
std::string iden = GetJsonStringValue(json, "iden", &findIden);
cJSON* retJson = cJSON_CreateObject();
if (NULL != retJson)
{
cJSON_AddItemToObject(retJson, "func", cJSON_CreateString("image_book_sort"));
if (findIden)
cJSON_AddItemToObject(retJson, "iden", cJSON_CreateString(iden.c_str()));
cJSON_AddItemToObject(retJson, "ret", cJSON_CreateNumber(ret));
if (0 != ret)
cJSON_AddItemToObject(retJson, "err_info", cJSON_CreateString(StdStringToUtf8(errInfo).c_str()));
char* resp = cJSON_Print(retJson);
if (NULL != resp)
{
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
free(resp);
}
cJSON_Delete(retJson);
}
}
}