webscan项目增加立思辰新webapi接口

This commit is contained in:
luoliangyi 2024-10-16 09:11:27 +08:00
parent 57327408d8
commit e705ba136a
5 changed files with 512 additions and 89 deletions

View File

@ -4,8 +4,9 @@
WebServer::WebServer(HGMsgPump msgPump) WebServer::WebServer(HGMsgPump msgPump)
{ {
m_msgPump = msgPump; m_msgPump = msgPump;
m_currUserId = 1; m_currUserId = 1;
m_port = 0;
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
m_sockServer = INVALID_SOCKET; m_sockServer = INVALID_SOCKET;
#else #else
@ -75,6 +76,7 @@ bool WebServer::Open(HGUShort port)
return false; return false;
} }
m_port = port;
m_sockServer = sockServer; m_sockServer = sockServer;
HGBase_OpenThread(ThreadFunc, this, &m_listenThread); HGBase_OpenThread(ThreadFunc, this, &m_listenThread);
assert(NULL != m_listenThread); assert(NULL != m_listenThread);
@ -92,6 +94,17 @@ bool WebServer::Close()
return false; 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()) while (!m_vectorUser.empty())
{ {
WebUser* pUser = m_vectorUser[0]; WebUser* pUser = m_vectorUser[0];
@ -100,18 +113,14 @@ bool WebServer::Close()
pUser = NULL; 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; return true;
} }
bool WebServer::IsOld()
{
return (9458 == m_port);
}
void WebServer::Connect(const ConnectParam* param) void WebServer::Connect(const ConnectParam* param)
{ {
assert(NULL != param && this == param->svr); assert(NULL != param && this == param->svr);
@ -232,6 +241,7 @@ int WebServer::GetUserIndex(HGUInt id)
void HGAPI WebServer::ThreadFunc(HGThread thread, HGPointer param) void HGAPI WebServer::ThreadFunc(HGThread thread, HGPointer param)
{ {
(void)thread;
WebServer* p = (WebServer*)param; WebServer* p = (WebServer*)param;
while (1) while (1)

View File

@ -15,6 +15,7 @@ public:
bool Open(HGUShort port); bool Open(HGUShort port);
bool Close(); bool Close();
bool IsOld();
void Connect(const ConnectParam* param); void Connect(const ConnectParam* param);
void DisConnect(const DisConnectParam* param); void DisConnect(const DisConnectParam* param);
@ -34,8 +35,9 @@ private:
private: private:
HGMsgPump m_msgPump; HGMsgPump m_msgPump;
HGUInt m_currUserId; HGUInt m_currUserId;
HGUShort m_port;
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
SOCKET m_sockServer; SOCKET m_sockServer;
#else #else

View File

@ -211,7 +211,6 @@ WebUser::WebUser(WebServer* server, HGUInt id, HGMsgPump msgPump, const std::str
m_devNameList.clear(); m_devNameList.clear();
m_devName.clear(); m_devName.clear();
m_devHandle = NULL; m_devHandle = NULL;
m_dpi = 0;
m_scanEvent = NULL; m_scanEvent = NULL;
SANE_Int version_code = 0; SANE_Int version_code = 0;
@ -232,7 +231,6 @@ WebUser::~WebUser()
if (NULL != m_devHandle) if (NULL != m_devHandle)
{ {
m_dpi = 0;
sane_close(m_devHandle); sane_close(m_devHandle);
m_devHandle = NULL; m_devHandle = NULL;
m_devName.clear(); m_devName.clear();
@ -284,7 +282,6 @@ void WebUser::CloseDev(const CloseDevParam* param)
if (NULL != m_devHandle) if (NULL != m_devHandle)
{ {
m_dpi = 0;
sane_close(m_devHandle); sane_close(m_devHandle);
m_devHandle = NULL; m_devHandle = NULL;
m_devName.clear(); m_devName.clear();
@ -310,11 +307,17 @@ void WebUser::ScanFinish(const ScanFinishParam* param)
void WebUser::HandleCmd(const WSCmdParam* param) void WebUser::HandleCmd(const WSCmdParam* param)
{ {
assert(NULL != param && m_id == param->usrId); assert(NULL != param && m_id == param->usrId);
std::string cmdData((const char*)param->data, param->size); 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"); std::string func = GetJsonStringValue(json, "Func");
if ("GetDeviceList" == func) if ("GetDeviceList" == func)
{ {
@ -347,6 +350,26 @@ void WebUser::HandleCmd(const WSCmdParam* param)
cJSON_Delete(json); 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) void WebUser::HandleEvent(const WSEvtParam* param)
@ -423,7 +446,6 @@ void WebUser::SelectDevice(cJSON* json)
if (NULL != m_devHandle) if (NULL != m_devHandle)
{ {
m_dpi = 0;
sane_close(m_devHandle); sane_close(m_devHandle);
m_devHandle = NULL; m_devHandle = NULL;
m_devName.clear(); m_devName.clear();
@ -435,7 +457,6 @@ void WebUser::SelectDevice(cJSON* json)
{ {
m_devName = m_devNameList[index]; m_devName = m_devNameList[index];
m_devHandle = dev; m_devHandle = dev;
m_dpi = GetDpi();
code = 0; code = 0;
result.clear(); result.clear();
} }
@ -520,7 +541,6 @@ void WebUser::SetDPI(cJSON* json)
{ {
if (SetParam(OPTION_TITLE_FBL, &dpi)) if (SetParam(OPTION_TITLE_FBL, &dpi))
{ {
m_dpi = dpi;
code = 0; code = 0;
result.clear(); 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() void WebUser::PostDisConnectMsg()
{ {
DisConnectParam* param = new DisConnectParam; 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 HGAPI WebUser::ThreadFunc(HGThread thread, HGPointer param)
{ {
(void)thread;
WebUser* p = (WebUser*)param; WebUser* p = (WebUser*)param;
char chBuffer[2048]; 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); HGBase_EnterLock(p->m_lockName);
p->m_devNameList.push_back(sane_dev->name); p->m_devNameList.push_back(sane_dev->name);
HGBase_LeaveLock(p->m_lockName); 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; break;
case SANE_EVENT_DEVICE_LEFT: 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; delete closeDevParam;
} }
bool b = false;
HGBase_EnterLock(p->m_lockName); HGBase_EnterLock(p->m_lockName);
for (int i = 0; i < (int)p->m_devNameList.size(); ++i) for (int i = 0; i < (int)p->m_devNameList.size(); ++i)
{ {
if (0 == strcmp(sane_dev->name, p->m_devNameList[i].c_str())) if (0 == strcmp(sane_dev->name, p->m_devNameList[i].c_str()))
{ {
p->m_devNameList.erase(p->m_devNameList.begin() + i); p->m_devNameList.erase(p->m_devNameList.begin() + i);
b = true;
break; break;
} }
} }
HGBase_LeaveLock(p->m_lockName); 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; break;
case SANE_EVENT_WORKING: case SANE_EVENT_WORKING:
@ -1094,6 +1497,8 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
delete scanFinishParam; delete scanFinishParam;
} }
if (p->m_server->IsOld())
{
int code = 0; int code = 0;
std::string result = ""; std::string result = "";
@ -1116,6 +1521,7 @@ int WebUser::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
cJSON_Delete(retJson); cJSON_Delete(retJson);
} }
} }
}
break; break;
case SANE_EVENT_STATUS: 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); HGBase_CreateImageFromData(data, &imgInfo, NULL, 0, HGBASE_IMGORIGIN_TOP, &img);
if (NULL != 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; int code = 0;
std::string result = p->GetBase64(img); 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); cJSON_Delete(retJson);
} }
}
HGBase_DestroyImage(img); HGBase_DestroyImage(img);
} }
@ -1221,6 +1630,23 @@ std::string WebUser::GetBase64(HGImage image)
return ret; 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) HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
{ {
assert(NULL != m_devHandle); assert(NULL != m_devHandle);
@ -1277,39 +1703,6 @@ HGBool WebUser::SetParam(const char* optionName, const HGVoid* data)
return ret; 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) bool WebUser::ShakeHand(const std::string& head)
{ {
std::string requestMethod; std::string requestMethod;

View File

@ -32,6 +32,7 @@ public:
void HandleEvent(const WSEvtParam* param); void HandleEvent(const WSEvtParam* param);
private: private:
// OLD
void GetDeviceList(cJSON *json); void GetDeviceList(cJSON *json);
void SelectDevice(cJSON* json); void SelectDevice(cJSON* json);
void SetScanColorType(cJSON* json); void SetScanColorType(cJSON* json);
@ -39,6 +40,11 @@ private:
void SetDuplex(cJSON* json); void SetDuplex(cJSON* json);
void SetScanJPGQuality(cJSON* json); void SetScanJPGQuality(cJSON* json);
void StartScan(cJSON* json); void StartScan(cJSON* json);
//NEW
void GetDeviceListNew();
void DeviceListPlugNew();
void GetSettingInfoNew(const std::string &devName);
void ConvertToBase64New(const std::string& filePath);
private: private:
void PostDisConnectMsg(); void PostDisConnectMsg();
@ -47,8 +53,8 @@ private:
static void HGAPI ThreadFunc(HGThread thread, HGPointer param); 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); 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(HGImage image);
std::string GetBase64(const HGByte* data, HGUInt size);
HGBool SetParam(const char* optionName, const HGVoid* data); HGBool SetParam(const char* optionName, const HGVoid* data);
HGInt GetDpi();
bool ShakeHand(const std::string& head); bool ShakeHand(const std::string& head);
void Pong(); void Pong();
@ -73,6 +79,5 @@ private:
std::vector<std::string> m_devNameList; std::vector<std::string> m_devNameList;
std::string m_devName; std::string m_devName;
SANE_Handle m_devHandle; SANE_Handle m_devHandle;
int m_dpi;
HGEvent m_scanEvent; HGEvent m_scanEvent;
}; };

View File

@ -2,17 +2,27 @@
#include "base/HGInc.h" #include "base/HGInc.h"
#include "base/HGThread.h" #include "base/HGThread.h"
#include "base/HGMsgPump.h" #include "base/HGMsgPump.h"
#include "base/HGUtility.h"
#include "base/HGIni.h"
#include "WebServer.h" #include "WebServer.h"
#include "MsgPumpCallback.h" #include "MsgPumpCallback.h"
#include "lang/app_language.h"
static void HGAPI ThreadFunc(HGThread thread, HGPointer param) static void HGAPI ThreadFunc(HGThread thread, HGPointer param)
{ {
(void)thread; (void)thread;
HGMsgPump msgPump = (HGMsgPump)param; HGMsgPump msgPump = (HGMsgPump)param;
HGChar cfgPath[256];
HGBase_GetConfigPath(cfgPath, 256);
HGChar cfgName[256];
sprintf(cfgName, "%s%s", cfgPath, "config.ini");
WebServer wsServer(msgPump); WebServer wsServer(msgPump);
HGInt port = 9458; //HGInt port = 9458;
HGInt port = 23165;
HGBase_GetProfileInt(cfgName, "connect", "port", 23165, &port);
if (wsServer.Open(port)) if (wsServer.Open(port))
{ {
HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL); HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL);
@ -32,6 +42,9 @@ int main()
assert(0 == ret); assert(0 == ret);
#endif #endif
lang_initialize(nullptr);
lang_set_code_page(20127);
HGMsgPump msgPump = NULL; HGMsgPump msgPump = NULL;
HGBase_CreateMsgPump(&msgPump); HGBase_CreateMsgPump(&msgPump);