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