This commit is contained in:
yangjiaxuan 2023-05-17 16:46:01 +08:00
commit 4daa005cf8
13 changed files with 242 additions and 15 deletions

View File

@ -1,6 +1,11 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "imgfmt/HGImgFmt.h"
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QNetworkAccessManager>
#include <QHttpPart>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
@ -39,6 +44,7 @@ void MainWindow::on_newImage(void *image)
void MainWindow::on_pushButton_selectDev_clicked()
{
#if 1
if (nullptr != m_devUser)
{
disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
@ -54,6 +60,48 @@ void MainWindow::on_pushButton_selectDev_clicked()
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
ui->label_currDevName->setText(m_devUser->GetName());
}
#else
QString filePath("D:\\1.jpg");
QFileInfo info(filePath);
QFile *file = new QFile(filePath);
file->open(QIODevice::ReadOnly);
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart filePart;
filePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"123456.jpg\""));
filePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
filePart.setBodyDevice(file);
multiPart->append(filePart);
QHttpPart machinePart;
machinePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"machine\""));
machinePart.setBody(QByteArray("M2"));
multiPart->append(machinePart);
QHttpPart submitPart;
submitPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"submit\""));
submitPart.setBody(QByteArray("Submit"));
multiPart->append(submitPart);
QNetworkRequest request;
request.setUrl(QUrl("http://47.104.31.27:8500/v1/api/file/upload"));
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
QNetworkReply *reply = accessManager->post(request, multiPart);
multiPart->setParent(reply);
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QString s = QString(reply->readAll());
qDebug(s.toStdString().c_str());
file->close();
reply->abort();
accessManager->deleteLater();//不主动释放会在卸载DLL时造成耗时
accessManager=NULL;
#endif
}
void MainWindow::on_pushButton_setting_clicked()

View File

@ -1,4 +1,4 @@
QT += core gui
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

View File

@ -101,6 +101,7 @@ unix {
}
INCLUDEPATH += $$PWD/../../../third_party/json
INCLUDEPATH += $$PWD/../../../utility
DESTDIR = $$PWD/../../build/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE}
UI_DIR = $$PWD/../../temp/$${MY_OS}/$${OEM_NAME}/$${MY_ARCH}/$${MY_CONFIGURE}/$${TARGET}
@ -172,10 +173,12 @@ unix {
SOURCES += \
../../../modules/version/HGVersion.cpp \
../../../modules/version/HGVersionImpl.cpp \
../../../third_party/json/cJSON.c
../../../third_party/json/cJSON.c \
../../../utility/HGString.cpp
HEADERS += \
../../../modules/version/HGVersion.h \
../../../modules/version/HGVersionImpl.hpp \
../../../modules/version/HGVersionMsg.hpp \
../../../third_party/json/cJSON.h
../../../third_party/json/cJSON.h \
../../../utility/HGString.h

View File

@ -43,7 +43,8 @@ HGResult HGInfoImpl::Enable()
HGBase_GetProfileInt(cfgPath, "info", "writeLog", 1, &writeLog);
HGBool writeConsole;
HGBase_GetProfileInt(cfgPath, "info", "writeConsole", 0, &writeConsole);
HGUInt defType = HGBASE_INFOTYPE_FATAL | HGBASE_INFOTYPE_ERROR | HGBASE_INFOTYPE_WARNING;
HGUInt defType = HGBASE_INFOTYPE_FATAL | HGBASE_INFOTYPE_ERROR | HGBASE_INFOTYPE_WARNING
| HGBASE_INFOTYPE_DESC | HGBASE_INFOTYPE_DEBUG;
HGBase_GetProfileInt(cfgPath, "info", "type", (HGInt)defType, (HGInt*)&m_type);
HGBase_GetProfileInt(cfgPath, "info", "showTime", 1, &m_showTime);
HGBase_GetProfileInt(cfgPath, "info", "showId", 0, &m_showId);

View File

@ -15,6 +15,7 @@
#if defined(HG_CMP_MSC)
#include <iphlpapi.h>
#endif
#include "HGString.h"
struct VersionInfoImpl
{
@ -74,7 +75,7 @@ static HGResult GetServerConfig(HGServerConfig& config)
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -158,7 +159,7 @@ static HGResult CrashFileUpload(const std::string& crashFilePath, std::string& c
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -596,7 +597,7 @@ static HGResult PostInfo(int type, const std::string& appName, const std::string
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -703,7 +704,7 @@ static HGResult PostDeviceInfo(const std::string& devName, const std::string& de
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -801,7 +802,7 @@ static HGResult PostDeviceLockInfo(const std::string& devName, const std::string
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -906,7 +907,7 @@ static HGResult PostUserInfo(const std::string& appName, const std::string& oemN
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -970,7 +971,7 @@ static HGResult GetVersionList(const std::string& appName, const std::string& oe
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -1592,7 +1593,7 @@ HGResult HGVersionMgrImpl::BlackListCheck(const HGChar* devSN, HGBool* inList)
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)
@ -1657,7 +1658,7 @@ static HGResult GetDriverVersionList(const std::string& devType, std::list<Versi
else
{
std::string str_json = out.str(); // 返回值
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", str_json.c_str());
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "str_json=%s", Utf8ToStdString(str_json).c_str());
cJSON* json = cJSON_Parse(str_json.c_str());
if (NULL != json)

View File

@ -29,6 +29,7 @@ namespace ver_2
ManagerV2::ManagerV2(HGMsgPump msgPump)
: Manager(msgPump)
{
m_lock = NULL;
HGBase_CreateLock(&m_lock);
HGChar docsPath[256];
@ -52,6 +53,12 @@ namespace ver_2
m_globalCfg.fileSavePath = stdSavePath;
m_user.clear();
m_stopThread = HGFALSE;
m_timeout = 0xFFFFFFFF;
m_event = NULL;
HGBase_CreateEvent(HGFALSE, HGFALSE, &m_event);
m_thread = NULL;
HGBase_OpenThread(ThreadFunc, this, &m_thread);
m_initDevice = false;
m_devNameList.clear();
@ -158,10 +165,25 @@ namespace ver_2
m_sqlite = NULL;
}
m_stopThread = HGTRUE;
HGBase_SetEvent(m_event);
HGBase_CloseThread(m_thread);
m_thread = NULL;
HGBase_DestroyEvent(m_event);
m_event = NULL;
HGBase_DestroyLock(m_lock);
m_lock = NULL;
}
void ManagerV2::DeinitDev(const DeinitDevParam* param)
{
assert(NULL != param && this == param->mgr);
std::string errInfo;
DeinitDevice(errInfo);
}
void ManagerV2::CloseDev(const CloseDevParam* param)
{
assert(NULL != param && this == param->mgr);
@ -210,6 +232,8 @@ namespace ver_2
assert(NULL != user);
HGBase_EnterLock(m_lock);
m_user.push_back(user);
m_timeout = 0xFFFFFFFF;
HGBase_SetEvent(m_event);
HGBase_LeaveLock(m_lock);
}
@ -223,6 +247,12 @@ namespace ver_2
if (*iter == user)
{
m_user.erase(iter);
if (m_user.empty())
{
m_timeout = 1000 * 10 * 60;
HGBase_SetEvent(m_event);
}
break;
}
}
@ -4202,4 +4232,31 @@ namespace ver_2
return 0;
}
void HGAPI ManagerV2::ThreadFunc(HGThread thread, HGPointer param)
{
ManagerV2 *p = (ManagerV2 *)param;
while (!p->m_stopThread)
{
HGBase_EnterLock(p->m_lock);
HGUInt timeout = p->m_timeout;
HGBase_LeaveLock(p->m_lock);
HGResult ret = HGBase_WaitEventTimeout(p->m_event, timeout);
if (HGBASE_ERR_TIMEOUT == ret)
{
HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "timeout, deinit device");
DeinitDevParam* deinitDevParam = new DeinitDevParam;
deinitDevParam->mgr = p;
HGMsg msg;
msg.id = MSGID_DEINIT_DEVICE;
msg.data = deinitDevParam;
if (HGBASE_ERR_OK != HGBase_PostPumpMessage(p->m_msgPump, &msg))
{
delete deinitDevParam;
}
}
}
}
}

View File

@ -6,6 +6,7 @@
#include "base/HGImage.h"
#include "base/HGMsgPump.h"
#include "base/HGEvent.h"
#include "base/HGThread.h"
#include "sane/sane_ex.h"
#include "sane/sane_option_definitions.h"
#include "Manager.h"
@ -117,6 +118,8 @@ namespace ver_2
ManagerV2(HGMsgPump msgPump);
virtual ~ManagerV2();
// 反初始化
void DeinitDev(const DeinitDevParam* param);
// 关闭设备
void CloseDev(const CloseDevParam* param);
// 扫描完成
@ -293,11 +296,16 @@ namespace ver_2
void ClearBindFolderImageList(const std::vector<BatchTableInfo>& tables);
static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param);
static void HGAPI ThreadFunc(HGThread thread, HGPointer param);
private:
HGLock m_lock;
GlobalConfig m_globalCfg;
std::list<class WSUser *> m_user;
HGBool m_stopThread;
HGUInt m_timeout;
HGEvent m_event;
HGThread m_thread;
bool m_initDevice;
std::vector<std::string> m_devNameList;

View File

@ -94,7 +94,8 @@ namespace ver_2
{
enum
{
MSGID_CLOSE_DEVICE = 3L,
MSGID_DEINIT_DEVICE = 3L,
MSGID_CLOSE_DEVICE,
MSGID_SCAN_FINISH,
MSGID_ADD_SAVEDFILE,
MSGID_REMOVE_SAVEDFILE,
@ -105,6 +106,11 @@ namespace ver_2
class ManagerV2;
class WSServer;
struct DeinitDevParam
{
ManagerV2* mgr;
};
struct CloseDevParam
{
ManagerV2* mgr;
@ -143,4 +149,4 @@ namespace ver_2
HGByte* data;
HGUInt size;
};
}
}

View File

@ -102,6 +102,13 @@ namespace ver_2
delete param;
}
break;
case MSGID_DEINIT_DEVICE:
{
DeinitDevParam* param = (DeinitDevParam*)msg->data;
param->mgr->DeinitDev(param);
delete param;
}
break;
case MSGID_CLOSE_DEVICE:
{
CloseDevParam* param = (CloseDevParam*)msg->data;

View File

@ -298,6 +298,10 @@ namespace ver_2
{
DeinitDevice(json);
}
else if ("is_device_init" == func)
{
IsDeviceInit(json);
}
else if ("get_device_name_list" == func)
{
GetDeviceNameList(json);
@ -334,6 +338,10 @@ namespace ver_2
{
StopScan(json);
}
else if ("is_device_scanning" == func)
{
IsDeviceScanning(json);
}
else if ("get_batch_id_list" == func)
{
GetBatchIdList(json);
@ -2281,6 +2289,37 @@ namespace ver_2
}
}
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);
@ -2770,6 +2809,37 @@ namespace ver_2
}
}
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);

View File

@ -53,6 +53,7 @@ namespace ver_2
void InitDevice(cJSON* json);
void DeinitDevice(cJSON* json);
void IsDeviceInit(cJSON* json);
void GetDeviceNameList(cJSON* json);
void OpenDevice(cJSON* json);
void CloseDevice(cJSON* json);
@ -62,6 +63,7 @@ namespace ver_2
void GetCurrDeviceName(cJSON* json);
void StartScan(cJSON* json);
void StopScan(cJSON* json);
void IsDeviceScanning(cJSON* json);
void GetBatchIdList(cJSON* json);
void OpenBatch(cJSON* json);

View File

@ -121,6 +121,10 @@
{
alert(msg.data);
}
else if ("is_device_init" == message['func'])
{
alert(msg.data);
}
else if ("get_device_name_list" == message['func'])
{
alert(msg.data);
@ -189,6 +193,10 @@
{
alert(msg.data);
}
else if ("is_device_scanning" == message['func'])
{
alert(msg.data);
}
else if ("get_batch_id_list" == message['func'])
{
alert(msg.data);
@ -523,6 +531,13 @@
}));
}
function IsDeviceInit()
{
socket.send(JSON.stringify({
'func':'is_device_init'
}));
}
function GetDevNameList()
{
socket.send(JSON.stringify({
@ -588,6 +603,13 @@
}));
}
function IsDeviceScanning()
{
socket.send(JSON.stringify({
'func':'is_device_scanning'
}));
}
function GetBatchIdList()
{
socket.send(JSON.stringify({
@ -907,6 +929,7 @@
<input type="button" value="初始化设备" onclick="InitDevice()" />
<input type="button" value="反初始化设备" onclick="DeinitDevice()" />
<input type="button" value="获取设备是否已初始化" onclick="IsDeviceInit()" />
<input type="button" value="获取设备列表" onclick="GetDevNameList()" />
<input type="button" value="打开设备" onclick="OpenDevice()" />
<input type="button" value="关闭设备" onclick="CloseDevice()" />
@ -916,6 +939,7 @@
<input type="button" value="获取当前设备名称" onclick="GetCurrDevName()" />
<input type="button" value="开始扫描" onclick="StartScan()" />
<input type="button" value="停止扫描" onclick="StopScan()" />
<input type="button" value="获取设备是否在扫描中" onclick="IsDeviceScanning()" />
<input type="button" value="获取批次名称列表" onclick="GetBatchIdList()" />
<input type="button" value="打开批次" onclick="OpenBatch()" />