webscan项目增加立思辰新webapi接口
This commit is contained in:
parent
57327408d8
commit
e705ba136a
|
@ -4,8 +4,9 @@
|
|||
WebServer::WebServer(HGMsgPump msgPump)
|
||||
{
|
||||
m_msgPump = msgPump;
|
||||
|
||||
m_currUserId = 1;
|
||||
|
||||
m_port = 0;
|
||||
#if defined(HG_CMP_MSC)
|
||||
m_sockServer = INVALID_SOCKET;
|
||||
#else
|
||||
|
@ -75,6 +76,7 @@ bool WebServer::Open(HGUShort port)
|
|||
return false;
|
||||
}
|
||||
|
||||
m_port = port;
|
||||
m_sockServer = sockServer;
|
||||
HGBase_OpenThread(ThreadFunc, this, &m_listenThread);
|
||||
assert(NULL != m_listenThread);
|
||||
|
@ -92,6 +94,17 @@ bool WebServer::Close()
|
|||
return false;
|
||||
}
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
closesocket(m_sockServer);
|
||||
m_sockServer = INVALID_SOCKET;
|
||||
#else
|
||||
close(m_sockServer);
|
||||
m_sockServer = -1;
|
||||
#endif
|
||||
m_port = 0;
|
||||
HGBase_CloseThread(m_listenThread);
|
||||
m_listenThread = NULL;
|
||||
|
||||
while (!m_vectorUser.empty())
|
||||
{
|
||||
WebUser* pUser = m_vectorUser[0];
|
||||
|
@ -100,18 +113,14 @@ bool WebServer::Close()
|
|||
pUser = NULL;
|
||||
}
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
closesocket(m_sockServer);
|
||||
m_sockServer = INVALID_SOCKET;
|
||||
#else
|
||||
close(m_sockServer);
|
||||
m_sockServer = -1;
|
||||
#endif
|
||||
HGBase_CloseThread(m_listenThread);
|
||||
m_listenThread = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WebServer::IsOld()
|
||||
{
|
||||
return (9458 == m_port);
|
||||
}
|
||||
|
||||
void WebServer::Connect(const ConnectParam* param)
|
||||
{
|
||||
assert(NULL != param && this == param->svr);
|
||||
|
@ -232,6 +241,7 @@ int WebServer::GetUserIndex(HGUInt id)
|
|||
|
||||
void HGAPI WebServer::ThreadFunc(HGThread thread, HGPointer param)
|
||||
{
|
||||
(void)thread;
|
||||
WebServer* p = (WebServer*)param;
|
||||
|
||||
while (1)
|
||||
|
|
|
@ -15,6 +15,7 @@ public:
|
|||
|
||||
bool Open(HGUShort port);
|
||||
bool Close();
|
||||
bool IsOld();
|
||||
|
||||
void Connect(const ConnectParam* param);
|
||||
void DisConnect(const DisConnectParam* param);
|
||||
|
@ -34,8 +35,9 @@ private:
|
|||
|
||||
private:
|
||||
HGMsgPump m_msgPump;
|
||||
|
||||
HGUInt m_currUserId;
|
||||
|
||||
HGUShort m_port;
|
||||
#if defined(HG_CMP_MSC)
|
||||
SOCKET m_sockServer;
|
||||
#else
|
||||
|
|
|
@ -211,7 +211,6 @@ WebUser::WebUser(WebServer* server, HGUInt id, HGMsgPump msgPump, const std::str
|
|||
m_devNameList.clear();
|
||||
m_devName.clear();
|
||||
m_devHandle = NULL;
|
||||
m_dpi = 0;
|
||||
m_scanEvent = NULL;
|
||||
|
||||
SANE_Int version_code = 0;
|
||||
|
@ -232,7 +231,6 @@ WebUser::~WebUser()
|
|||
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
m_dpi = 0;
|
||||
sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
|
@ -284,7 +282,6 @@ void WebUser::CloseDev(const CloseDevParam* param)
|
|||
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
m_dpi = 0;
|
||||
sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
|
@ -310,11 +307,17 @@ void WebUser::ScanFinish(const ScanFinishParam* param)
|
|||
void WebUser::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)
|
||||
|
||||
if (m_server->IsOld())
|
||||
{
|
||||
// OLD
|
||||
cJSON* json = cJSON_Parse(cmdData.c_str());
|
||||
if (NULL == json)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
std::string func = GetJsonStringValue(json, "Func");
|
||||
if ("GetDeviceList" == func)
|
||||
{
|
||||
|
@ -347,6 +350,26 @@ void WebUser::HandleCmd(const WSCmdParam* param)
|
|||
|
||||
cJSON_Delete(json);
|
||||
}
|
||||
else
|
||||
{
|
||||
// NEW
|
||||
if (cmdData == "CDEV")
|
||||
{
|
||||
GetDeviceListNew();
|
||||
}
|
||||
else if (cmdData == "CDEVPLUG")
|
||||
{
|
||||
DeviceListPlugNew();
|
||||
}
|
||||
else if (cmdData.find("COPT|") == 0)
|
||||
{
|
||||
GetSettingInfoNew(cmdData.substr(5));
|
||||
}
|
||||
else if (cmdData.find("CBASE64|") == 0)
|
||||
{
|
||||
ConvertToBase64New(cmdData.substr(8));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WebUser::HandleEvent(const WSEvtParam* param)
|
||||
|
@ -423,7 +446,6 @@ void WebUser::SelectDevice(cJSON* json)
|
|||
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
m_dpi = 0;
|
||||
sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
|
@ -435,7 +457,6 @@ void WebUser::SelectDevice(cJSON* json)
|
|||
{
|
||||
m_devName = m_devNameList[index];
|
||||
m_devHandle = dev;
|
||||
m_dpi = GetDpi();
|
||||
code = 0;
|
||||
result.clear();
|
||||
}
|
||||
|
@ -520,7 +541,6 @@ void WebUser::SetDPI(cJSON* json)
|
|||
{
|
||||
if (SetParam(OPTION_TITLE_FBL, &dpi))
|
||||
{
|
||||
m_dpi = dpi;
|
||||
code = 0;
|
||||
result.clear();
|
||||
}
|
||||
|
@ -681,6 +701,374 @@ void WebUser::StartScan(cJSON* json)
|
|||
}
|
||||
}
|
||||
|
||||
void WebUser::GetDeviceListNew()
|
||||
{
|
||||
cJSON* retJson = cJSON_CreateObject();
|
||||
if (NULL != retJson)
|
||||
{
|
||||
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SDEV"));
|
||||
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2005));
|
||||
|
||||
std::string dataStr;
|
||||
|
||||
cJSON* arrayJson = cJSON_CreateArray();
|
||||
HGBase_EnterLock(m_lockName);
|
||||
for (int i = 0; i < (int)m_devNameList.size(); ++i)
|
||||
{
|
||||
cJSON* js = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(js, "Index", cJSON_CreateNumber(i));
|
||||
cJSON_AddItemToObject(js, "Name", cJSON_CreateString(m_devNameList[i].c_str()));
|
||||
cJSON_AddItemToArray(arrayJson, js);
|
||||
}
|
||||
HGBase_LeaveLock(m_lockName);
|
||||
|
||||
cJSON* dataJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(dataJson, "Devs", arrayJson);
|
||||
|
||||
char* str = cJSON_Print(dataJson);
|
||||
if (NULL != str)
|
||||
{
|
||||
dataStr = GetBase64((HGByte*)str, strlen(str));
|
||||
free(str);
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||
|
||||
char* resp = cJSON_Print(retJson);
|
||||
if (NULL != resp)
|
||||
{
|
||||
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||
free(resp);
|
||||
}
|
||||
|
||||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
|
||||
void WebUser::DeviceListPlugNew()
|
||||
{
|
||||
cJSON* retJson = cJSON_CreateObject();
|
||||
if (NULL != retJson)
|
||||
{
|
||||
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SDEVPLUG"));
|
||||
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2005));
|
||||
|
||||
std::string dataStr;
|
||||
|
||||
cJSON* arrayJson = cJSON_CreateArray();
|
||||
HGBase_EnterLock(m_lockName);
|
||||
for (int i = 0; i < (int)m_devNameList.size(); ++i)
|
||||
{
|
||||
cJSON* js = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(js, "Index", cJSON_CreateNumber(i));
|
||||
cJSON_AddItemToObject(js, "Name", cJSON_CreateString(m_devNameList[i].c_str()));
|
||||
cJSON_AddItemToArray(arrayJson, js);
|
||||
}
|
||||
HGBase_LeaveLock(m_lockName);
|
||||
|
||||
cJSON* dataJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(dataJson, "Devs", arrayJson);
|
||||
|
||||
char* str = cJSON_Print(dataJson);
|
||||
if (NULL != str)
|
||||
{
|
||||
dataStr = GetBase64((HGByte*)str, strlen(str));
|
||||
free(str);
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||
|
||||
char* resp = cJSON_Print(retJson);
|
||||
if (NULL != resp)
|
||||
{
|
||||
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||
free(resp);
|
||||
}
|
||||
|
||||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
|
||||
void WebUser::GetSettingInfoNew(const std::string& devName)
|
||||
{
|
||||
if (NULL != m_scanEvent)
|
||||
{
|
||||
assert(NULL != m_devHandle);
|
||||
sane_cancel(m_devHandle);
|
||||
|
||||
HGBase_WaitEvent(m_scanEvent);
|
||||
HGBase_DestroyEvent(m_scanEvent);
|
||||
m_scanEvent = NULL;
|
||||
}
|
||||
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
if (m_devName != devName)
|
||||
{
|
||||
sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL == m_devHandle)
|
||||
{
|
||||
SANE_Handle dev = NULL;
|
||||
SANE_Status status = sane_open(devName.c_str(), &dev);
|
||||
if (SANE_STATUS_GOOD == status)
|
||||
{
|
||||
m_devName = devName;
|
||||
m_devHandle = dev;
|
||||
}
|
||||
}
|
||||
|
||||
if (NULL != m_devHandle)
|
||||
{
|
||||
cJSON* retJson = cJSON_CreateObject();
|
||||
if (NULL != retJson)
|
||||
{
|
||||
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SOPT"));
|
||||
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2006));
|
||||
|
||||
std::string optStr;
|
||||
std::string optListStr;
|
||||
|
||||
cJSON* optJson = cJSON_CreateObject();
|
||||
if (NULL != optJson)
|
||||
{
|
||||
cJSON* optListJson = cJSON_CreateObject();
|
||||
if (NULL != optListJson)
|
||||
{
|
||||
cJSON* arrayJson = cJSON_CreateArray();
|
||||
|
||||
SANE_Int num_dev_options = 0;
|
||||
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
||||
for (int i = 1; i < num_dev_options; ++i)
|
||||
{
|
||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
||||
if (NULL == desp)
|
||||
continue;
|
||||
|
||||
const char* name = desp->title;
|
||||
while (' ' == *name)
|
||||
++name;
|
||||
|
||||
if (SANE_TYPE_STRING == desp->type)
|
||||
{
|
||||
char value[256] = { 0 };
|
||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
||||
cJSON_AddItemToObject(optJson, name, cJSON_CreateString(value));
|
||||
|
||||
cJSON* objJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(3));
|
||||
cJSON_AddItemToObject(objJson, "current", cJSON_CreateString(value));
|
||||
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||
|
||||
if (SANE_CONSTRAINT_STRING_LIST == desp->constraint_type)
|
||||
{
|
||||
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||
const SANE_String_Const* p = desp->constraint.string_list;
|
||||
while (NULL != *p)
|
||||
{
|
||||
cJSON_AddItemToArray(arrayJson2, cJSON_CreateString(*p));
|
||||
++p;
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(3));
|
||||
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||
|
||||
cJSON_AddItemToArray(arrayJson, objJson);
|
||||
}
|
||||
else if (SANE_TYPE_INT == desp->type)
|
||||
{
|
||||
SANE_Int value = 0;
|
||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||
cJSON_AddItemToObject(optJson, name, cJSON_CreateNumber(value));
|
||||
|
||||
cJSON* objJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(1));
|
||||
cJSON_AddItemToObject(objJson, "current", cJSON_CreateNumber(value));
|
||||
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||
|
||||
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
|
||||
{
|
||||
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||
const SANE_Word* p = desp->constraint.word_list;
|
||||
for (SANE_Int i = 0; i < p[0]; ++i)
|
||||
{
|
||||
cJSON_AddItemToArray(arrayJson2, cJSON_CreateNumber(p[i + 1]));
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||
}
|
||||
else if (SANE_CONSTRAINT_RANGE == desp->constraint_type)
|
||||
{
|
||||
// desp->constraint.range->min;
|
||||
// desp->constraint.range->max;
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(1));
|
||||
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||
|
||||
cJSON_AddItemToArray(arrayJson, objJson);
|
||||
}
|
||||
else if (SANE_TYPE_FIXED == desp->type)
|
||||
{
|
||||
SANE_Word value = 0;
|
||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||
cJSON_AddItemToObject(optJson, name, cJSON_CreateNumber(SANE_UNFIX(value)));
|
||||
|
||||
cJSON* objJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(2));
|
||||
cJSON_AddItemToObject(objJson, "current", cJSON_CreateNumber(SANE_UNFIX(value)));
|
||||
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||
|
||||
if (SANE_CONSTRAINT_WORD_LIST == desp->constraint_type)
|
||||
{
|
||||
cJSON* arrayJson2 = cJSON_CreateArray();
|
||||
const SANE_Word* p = desp->constraint.word_list;
|
||||
for (SANE_Int i = 0; i < p[0]; ++i)
|
||||
{
|
||||
cJSON_AddItemToArray(arrayJson2, cJSON_CreateNumber(SANE_UNFIX(p[i + 1])));
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "list", arrayJson2);
|
||||
}
|
||||
else if (SANE_CONSTRAINT_RANGE == desp->constraint_type)
|
||||
{
|
||||
// SANE_UNFIX(desp->constraint.range->min);
|
||||
// SANE_UNFIX(desp->constraint.range->max);
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(2));
|
||||
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||
|
||||
cJSON_AddItemToArray(arrayJson, objJson);
|
||||
}
|
||||
else if (SANE_TYPE_BOOL == desp->type)
|
||||
{
|
||||
SANE_Bool value = 0;
|
||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||
cJSON_AddItemToObject(optJson, name, value ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
||||
|
||||
cJSON* objJson = cJSON_CreateObject();
|
||||
cJSON_AddItemToObject(objJson, "constType", cJSON_CreateNumber(0));
|
||||
cJSON_AddItemToObject(objJson, "current", value ? cJSON_CreateTrue() : cJSON_CreateFalse());
|
||||
cJSON_AddItemToObject(objJson, "isActive", cJSON_CreateTrue());
|
||||
cJSON_AddItemToObject(objJson, "isSettable", cJSON_CreateTrue());
|
||||
|
||||
cJSON_AddItemToObject(objJson, "name", cJSON_CreateString(name));
|
||||
cJSON_AddItemToObject(objJson, "type", cJSON_CreateNumber(0));
|
||||
cJSON_AddItemToObject(objJson, "unit", cJSON_CreateString(""));
|
||||
|
||||
cJSON_AddItemToArray(arrayJson, objJson);
|
||||
}
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(optListJson, "Options", arrayJson);
|
||||
|
||||
char* str = cJSON_Print(optListJson);
|
||||
if (NULL != str)
|
||||
{
|
||||
optListStr = GetBase64((HGByte*)str, strlen(str));
|
||||
free(str);
|
||||
}
|
||||
|
||||
cJSON_Delete(optListJson);
|
||||
}
|
||||
|
||||
char* str = cJSON_Print(optJson);
|
||||
if (NULL != str)
|
||||
{
|
||||
optStr = GetBase64((HGByte*)str, strlen(str));
|
||||
free(str);
|
||||
}
|
||||
|
||||
cJSON_Delete(optJson);
|
||||
}
|
||||
|
||||
std::string dataStr = optStr + "|" + optListStr;
|
||||
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("json"));
|
||||
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||
|
||||
char* resp = cJSON_Print(retJson);
|
||||
if (NULL != resp)
|
||||
{
|
||||
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||
free(resp);
|
||||
}
|
||||
|
||||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WebUser::ConvertToBase64New(const std::string& filePath)
|
||||
{
|
||||
cJSON* retJson = cJSON_CreateObject();
|
||||
if (NULL != retJson)
|
||||
{
|
||||
cJSON_AddItemToObject(retJson, "Cmd", cJSON_CreateString("SBASE64"));
|
||||
cJSON_AddItemToObject(retJson, "Code", cJSON_CreateNumber(2007));
|
||||
|
||||
std::string dataStr;
|
||||
FILE* file = fopen(filePath.c_str(), "rb");
|
||||
if (NULL != file)
|
||||
{
|
||||
fseek(file, 0, SEEK_END);
|
||||
long size = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
|
||||
if (size > 0)
|
||||
{
|
||||
HGByte* data = new HGByte[size];
|
||||
long readLen = (long)fread(data, 1, size, file);
|
||||
if (readLen == size)
|
||||
{
|
||||
HGSize base64Size = 0;
|
||||
HGBase_Base64Encode(data, size, NULL, &base64Size);
|
||||
uint8_t* base64Data = new uint8_t[base64Size + 1];
|
||||
HGBase_Base64Encode(data, size, base64Data, &base64Size);
|
||||
base64Data[base64Size] = 0;
|
||||
dataStr = (const char*)base64Data;
|
||||
delete[] base64Data;
|
||||
}
|
||||
|
||||
delete[] data;
|
||||
}
|
||||
|
||||
fclose(file);
|
||||
}
|
||||
|
||||
cJSON_AddItemToObject(retJson, "Data", cJSON_CreateString(dataStr.c_str()));
|
||||
cJSON_AddItemToObject(retJson, "DataType", cJSON_CreateString("base64"));
|
||||
cJSON_AddItemToObject(retJson, "Msg", cJSON_CreateString("Success"));
|
||||
|
||||
char* resp = cJSON_Print(retJson);
|
||||
if (NULL != resp)
|
||||
{
|
||||
SendResponse((const HGByte*)resp, (HGUInt)strlen(resp), HGTRUE);
|
||||
free(resp);
|
||||
}
|
||||
|
||||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
|
||||
void WebUser::PostDisConnectMsg()
|
||||
{
|
||||
DisConnectParam* param = new DisConnectParam;
|
||||
|
@ -738,6 +1126,7 @@ void WebUser::PostEventMsg(const HGByte* data, HGUInt dataSize)
|
|||
|
||||
void HGAPI WebUser::ThreadFunc(HGThread thread, HGPointer param)
|
||||
{
|
||||
(void)thread;
|
||||
WebUser* p = (WebUser*)param;
|
||||
|
||||
char chBuffer[2048];
|
||||
|
@ -1042,6 +1431,12 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
HGBase_EnterLock(p->m_lockName);
|
||||
p->m_devNameList.push_back(sane_dev->name);
|
||||
HGBase_LeaveLock(p->m_lockName);
|
||||
|
||||
if (!p->m_server->IsOld())
|
||||
{
|
||||
std::string cmd = "CDEVPLUG";
|
||||
p->PostCmdMsg((const HGByte*)cmd.c_str(), (HGUInt)cmd.size());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SANE_EVENT_DEVICE_LEFT:
|
||||
|
@ -1061,16 +1456,24 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
delete closeDevParam;
|
||||
}
|
||||
|
||||
bool b = false;
|
||||
HGBase_EnterLock(p->m_lockName);
|
||||
for (int i = 0; i < (int)p->m_devNameList.size(); ++i)
|
||||
{
|
||||
if (0 == strcmp(sane_dev->name, p->m_devNameList[i].c_str()))
|
||||
{
|
||||
p->m_devNameList.erase(p->m_devNameList.begin() + i);
|
||||
b = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
HGBase_LeaveLock(p->m_lockName);
|
||||
|
||||
if (b && !p->m_server->IsOld())
|
||||
{
|
||||
std::string cmd = "CDEVPLUG";
|
||||
p->PostCmdMsg((const HGByte*)cmd.c_str(), (HGUInt)cmd.size());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SANE_EVENT_WORKING:
|
||||
|
@ -1094,6 +1497,8 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
delete scanFinishParam;
|
||||
}
|
||||
|
||||
if (p->m_server->IsOld())
|
||||
{
|
||||
int code = 0;
|
||||
std::string result = "";
|
||||
|
||||
|
@ -1116,6 +1521,7 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SANE_EVENT_STATUS:
|
||||
{
|
||||
|
@ -1150,8 +1556,10 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
|
||||
if (NULL != img)
|
||||
{
|
||||
HGBase_SetImageDpi(img, p->m_dpi, p->m_dpi);
|
||||
HGBase_SetImageDpi(img, sane_img->flag.dpi, sane_img->flag.dpi);
|
||||
|
||||
if (p->m_server->IsOld())
|
||||
{
|
||||
int code = 0;
|
||||
std::string result = p->GetBase64(img);
|
||||
|
||||
|
@ -1173,6 +1581,7 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
|
|||
|
||||
cJSON_Delete(retJson);
|
||||
}
|
||||
}
|
||||
|
||||
HGBase_DestroyImage(img);
|
||||
}
|
||||
|
@ -1221,6 +1630,23 @@ std::string WebUser::GetBase64(HGImage image)
|
|||
return ret;
|
||||
}
|
||||
|
||||
std::string WebUser::GetBase64(const HGByte* data, HGUInt size)
|
||||
{
|
||||
std::string ret;
|
||||
if (NULL != data && 0 != size)
|
||||
{
|
||||
HGSize base64Size = 0;
|
||||
HGBase_Base64Encode(data, size, NULL, &base64Size);
|
||||
HGByte* base64 = new HGByte[base64Size + 1];
|
||||
HGBase_Base64Encode(data, size, base64, &base64Size);
|
||||
base64[base64Size] = 0;
|
||||
ret = (const char*)base64;
|
||||
delete[] base64;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
|
||||
{
|
||||
assert(NULL != m_devHandle);
|
||||
|
@ -1277,39 +1703,6 @@ HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
|
|||
return ret;
|
||||
}
|
||||
|
||||
HGInt WebUser::GetDpi()
|
||||
{
|
||||
assert(NULL != m_devHandle);
|
||||
HGInt dpi = 0;
|
||||
|
||||
SANE_Int num_dev_options = 0;
|
||||
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
||||
for (int i = 1; i < num_dev_options; ++i)
|
||||
{
|
||||
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
||||
if (NULL == desp)
|
||||
continue;
|
||||
|
||||
const char* name = desp->title;
|
||||
while (' ' == *name)
|
||||
++name;
|
||||
|
||||
if (0 == strcmp(OPTION_TITLE_FBL, name))
|
||||
{
|
||||
if (SANE_TYPE_INT == desp->type)
|
||||
{
|
||||
SANE_Int value = 0;
|
||||
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
||||
dpi = value;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return dpi;
|
||||
}
|
||||
|
||||
bool WebUser::ShakeHand(const std::string& head)
|
||||
{
|
||||
std::string requestMethod;
|
||||
|
|
|
@ -32,6 +32,7 @@ public:
|
|||
void HandleEvent(const WSEvtParam* param);
|
||||
|
||||
private:
|
||||
// OLD
|
||||
void GetDeviceList(cJSON *json);
|
||||
void SelectDevice(cJSON* json);
|
||||
void SetScanColorType(cJSON* json);
|
||||
|
@ -39,6 +40,11 @@ private:
|
|||
void SetDuplex(cJSON* json);
|
||||
void SetScanJPGQuality(cJSON* json);
|
||||
void StartScan(cJSON* json);
|
||||
//NEW
|
||||
void GetDeviceListNew();
|
||||
void DeviceListPlugNew();
|
||||
void GetSettingInfoNew(const std::string &devName);
|
||||
void ConvertToBase64New(const std::string& filePath);
|
||||
|
||||
private:
|
||||
void PostDisConnectMsg();
|
||||
|
@ -47,8 +53,8 @@ private:
|
|||
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
|
||||
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
|
||||
std::string GetBase64(HGImage image);
|
||||
std::string GetBase64(const HGByte* data, HGUInt size);
|
||||
HGBool SetParam(const char* optionName, const HGVoid* data);
|
||||
HGInt GetDpi();
|
||||
|
||||
bool ShakeHand(const std::string& head);
|
||||
void Pong();
|
||||
|
@ -73,6 +79,5 @@ private:
|
|||
std::vector<std::string> m_devNameList;
|
||||
std::string m_devName;
|
||||
SANE_Handle m_devHandle;
|
||||
int m_dpi;
|
||||
HGEvent m_scanEvent;
|
||||
};
|
||||
|
|
|
@ -2,17 +2,27 @@
|
|||
#include "base/HGInc.h"
|
||||
#include "base/HGThread.h"
|
||||
#include "base/HGMsgPump.h"
|
||||
#include "base/HGUtility.h"
|
||||
#include "base/HGIni.h"
|
||||
#include "WebServer.h"
|
||||
#include "MsgPumpCallback.h"
|
||||
#include "lang/app_language.h"
|
||||
|
||||
static void HGAPI ThreadFunc(HGThread thread, HGPointer param)
|
||||
{
|
||||
(void)thread;
|
||||
HGMsgPump msgPump = (HGMsgPump)param;
|
||||
|
||||
HGChar cfgPath[256];
|
||||
HGBase_GetConfigPath(cfgPath, 256);
|
||||
HGChar cfgName[256];
|
||||
sprintf(cfgName, "%s%s", cfgPath, "config.ini");
|
||||
|
||||
WebServer wsServer(msgPump);
|
||||
|
||||
HGInt port = 9458;
|
||||
//HGInt port = 9458;
|
||||
HGInt port = 23165;
|
||||
HGBase_GetProfileInt(cfgName, "connect", "port", 23165, &port);
|
||||
if (wsServer.Open(port))
|
||||
{
|
||||
HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL);
|
||||
|
@ -32,6 +42,9 @@ int main()
|
|||
assert(0 == ret);
|
||||
#endif
|
||||
|
||||
lang_initialize(nullptr);
|
||||
lang_set_code_page(20127);
|
||||
|
||||
HGMsgPump msgPump = NULL;
|
||||
HGBase_CreateMsgPump(&msgPump);
|
||||
|
||||
|
|
Loading…
Reference in New Issue