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
8e4ed50b
Commit
8e4ed50b
authored
Apr 20, 2022
by
luoliangyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
将消息队列独立成单独的类,三个服务共享同一个消息循环
parent
89dad333
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
373 additions
and
352 deletions
+373
-352
sdk/webservice/HttpUser.cpp
sdk/webservice/HttpUser.cpp
+34
-31
sdk/webservice/Manager.cpp
sdk/webservice/Manager.cpp
+94
-83
sdk/webservice/Manager.h
sdk/webservice/Manager.h
+9
-2
sdk/webservice/MsgLoop.cpp
sdk/webservice/MsgLoop.cpp
+55
-4
sdk/webservice/MsgLoop.h
sdk/webservice/MsgLoop.h
+8
-3
sdk/webservice/SockIoUser.cpp
sdk/webservice/SockIoUser.cpp
+43
-33
sdk/webservice/WebMsg.h
sdk/webservice/WebMsg.h
+15
-1
sdk/webservice/WebServer.cpp
sdk/webservice/WebServer.cpp
+43
-98
sdk/webservice/WebServer.h
sdk/webservice/WebServer.h
+14
-20
sdk/webservice/WebUser.cpp
sdk/webservice/WebUser.cpp
+11
-0
sdk/webservice/WebUser.h
sdk/webservice/WebUser.h
+2
-0
sdk/webservice/WsUser.cpp
sdk/webservice/WsUser.cpp
+34
-24
sdk/webservice/main.cpp
sdk/webservice/main.cpp
+11
-53
No files found.
sdk/webservice/HttpUser.cpp
View file @
8e4ed50b
#include "HttpUser.h"
#include "HttpUser.h"
#include "WebServer.h"
#include "WebServer.h"
#include "MsgLoop.h"
#include "Manager.h"
#include "Manager.h"
#include "../../base/HGInfo.h"
#include "../../base/HGInfo.h"
#include "cJSON.h"
#include "cJSON.h"
extern
Manager
*
g_manager
;
static
std
::
string
ToJsonPair
(
const
std
::
string
&
key
,
int
value
,
bool
sep
)
static
std
::
string
ToJsonPair
(
const
std
::
string
&
key
,
int
value
,
bool
sep
)
{
{
char
ret
[
256
];
char
ret
[
256
];
...
@@ -138,7 +137,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -138,7 +137,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
}
}
std
::
string
devId
;
std
::
string
devId
;
g_manager
->
GetCurDevId
(
devId
);
GetManager
()
->
GetCurDevId
(
devId
);
char
*
result
=
new
char
[
devId
.
size
()
+
256
];
char
*
result
=
new
char
[
devId
.
size
()
+
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devId
.
c_str
());
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devId
.
c_str
());
...
@@ -149,7 +148,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -149,7 +148,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
else
if
(
requestMethod
==
"GET"
&&
requestURIPath
==
"/WebScan/getDevices"
)
else
if
(
requestMethod
==
"GET"
&&
requestURIPath
==
"/WebScan/getDevices"
)
{
{
std
::
vector
<
std
::
string
>
devNameList
;
std
::
vector
<
std
::
string
>
devNameList
;
g_manager
->
GetDevNames
(
devNameList
);
GetManager
()
->
GetDevNames
(
devNameList
);
std
::
string
devNames
=
"["
;
std
::
string
devNames
=
"["
;
for
(
int
i
=
0
;
i
<
(
int
)
devNameList
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
(
int
)
devNameList
.
size
();
++
i
)
...
@@ -173,7 +172,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -173,7 +172,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
vector
<
std
::
string
>
imgNameList
;
std
::
vector
<
std
::
string
>
imgNameList
;
std
::
vector
<
std
::
string
>
imgBase64List
;
std
::
vector
<
std
::
string
>
imgBase64List
;
g_manager
->
GetImageByDevId
(
devId
,
imgNameList
,
imgBase64List
);
GetManager
()
->
GetImageByDevId
(
devId
,
imgNameList
,
imgBase64List
);
std
::
string
imgInfos
=
"["
;
std
::
string
imgInfos
=
"["
;
for
(
int
i
=
0
;
i
<
(
int
)
imgNameList
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
(
int
)
imgNameList
.
size
();
++
i
)
...
@@ -199,7 +198,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -199,7 +198,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
DevParam
devParam
;
DevParam
devParam
;
g_manager
->
GetDevParam
(
devId
,
devParam
);
GetManager
()
->
GetDevParam
(
devId
,
devParam
);
std
::
string
devParamStr
=
"{"
;
std
::
string
devParamStr
=
"{"
;
devParamStr
+=
ToJsonPair
(
"device"
,
devParam
.
device
,
true
);
devParamStr
+=
ToJsonPair
(
"device"
,
devParam
.
device
,
true
);
...
@@ -294,7 +293,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -294,7 +293,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
cJSON_Delete
(
json
);
cJSON_Delete
(
json
);
}
}
g_manager
->
SetDevParam
(
devId
,
devParam
);
GetManager
()
->
SetDevParam
(
devId
,
devParam
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"\"
}"
,
200
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"\"
}"
,
200
);
...
@@ -306,7 +305,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -306,7 +305,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
HGByte
*
data
=
NULL
;
HGByte
*
data
=
NULL
;
HGUInt
size
=
0
;
HGUInt
size
=
0
;
g_manager
->
ExportOfdFile
(
&
data
,
&
size
);
GetManager
()
->
ExportOfdFile
(
&
data
,
&
size
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/zip"
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/zip"
);
delete
[]
data
;
delete
[]
data
;
}
}
...
@@ -314,7 +313,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -314,7 +313,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
HGByte
*
data
=
NULL
;
HGByte
*
data
=
NULL
;
HGUInt
size
=
0
;
HGUInt
size
=
0
;
g_manager
->
ExportPdfFile
(
&
data
,
&
size
);
GetManager
()
->
ExportPdfFile
(
&
data
,
&
size
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/pdf"
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/pdf"
);
delete
[]
data
;
delete
[]
data
;
}
}
...
@@ -322,7 +321,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -322,7 +321,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
HGByte
*
data
=
NULL
;
HGByte
*
data
=
NULL
;
HGUInt
size
=
0
;
HGUInt
size
=
0
;
g_manager
->
ExportTiffFile
(
&
data
,
&
size
);
GetManager
()
->
ExportTiffFile
(
&
data
,
&
size
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/x-tif"
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/x-tif"
);
delete
[]
data
;
delete
[]
data
;
}
}
...
@@ -330,7 +329,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -330,7 +329,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
HGByte
*
data
=
NULL
;
HGByte
*
data
=
NULL
;
HGUInt
size
=
0
;
HGUInt
size
=
0
;
g_manager
->
ExportZipFile
(
&
data
,
&
size
);
GetManager
()
->
ExportZipFile
(
&
data
,
&
size
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/zip"
);
SendResponse
(
requestHttpVersion
.
c_str
(),
200
,
"OK"
,
data
,
size
,
"application/zip"
);
delete
[]
data
;
delete
[]
data
;
}
}
...
@@ -365,7 +364,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -365,7 +364,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
cJSON_Delete
(
json
);
cJSON_Delete
(
json
);
}
}
g_manager
->
UploadImage
(
uploadParam
);
GetManager
()
->
UploadImage
(
uploadParam
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -384,7 +383,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -384,7 +383,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"imageName"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"imageName"
);
std
::
string
imgBase64
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"image"
);
std
::
string
imgBase64
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"image"
);
g_manager
->
SaveImage
(
devId
,
imgName
,
imgBase64
);
GetManager
()
->
SaveImage
(
devId
,
imgName
,
imgBase64
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -402,7 +401,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -402,7 +401,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"imageName"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"imageName"
);
g_manager
->
DeleteImage
(
devId
,
imgName
);
GetManager
()
->
DeleteImage
(
devId
,
imgName
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -419,7 +418,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -419,7 +418,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
HttpHead
::
AnalysisURIQuery
(
query
.
c_str
(),
uriQueryInfos
);
HttpHead
::
AnalysisURIQuery
(
query
.
c_str
(),
uriQueryInfos
);
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
g_manager
->
DeleteAllImage
(
devId
);
GetManager
()
->
DeleteAllImage
(
devId
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -447,7 +446,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -447,7 +446,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
}
}
}
}
std
::
string
imgName
,
imgBase64
;
std
::
string
imgName
,
imgBase64
;
g_manager
->
MergeImage
(
devId
,
isHorizontal
,
imgIndexs
,
imgName
,
imgBase64
);
GetManager
()
->
MergeImage
(
devId
,
isHorizontal
,
imgIndexs
,
imgName
,
imgBase64
);
char
*
result
=
new
char
[
256
+
imgName
.
size
()
+
imgBase64
.
size
()];
char
*
result
=
new
char
[
256
+
imgName
.
size
()
+
imgBase64
.
size
()];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:{
\"
imageName
\"
:
\"
%s
\"
,
\"
src
\"
:
\"
%s
\"
}}"
,
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:{
\"
imageName
\"
:
\"
%s
\"
,
\"
src
\"
:
\"
%s
\"
}}"
,
...
@@ -467,7 +466,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -467,7 +466,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
uriQueryInfos
,
"pid"
);
std
::
vector
<
std
::
string
>
imgNameList
,
imgBase64List
;
std
::
vector
<
std
::
string
>
imgNameList
,
imgBase64List
;
g_manager
->
BookSort
(
devId
,
imgNameList
,
imgBase64List
);
GetManager
()
->
BookSort
(
devId
,
imgNameList
,
imgBase64List
);
std
::
string
imgInfos
=
"["
;
std
::
string
imgInfos
=
"["
;
for
(
int
i
=
0
;
i
<
(
int
)
imgNameList
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
(
int
)
imgNameList
.
size
();
++
i
)
...
@@ -510,7 +509,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -510,7 +509,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
index2
=
atoi
(
uriQueryInfos
[
i
].
second
.
c_str
());
index2
=
atoi
(
uriQueryInfos
[
i
].
second
.
c_str
());
}
}
}
}
g_manager
->
ExchangeImage
(
devId
,
index1
,
index2
);
GetManager
()
->
ExchangeImage
(
devId
,
index1
,
index2
);
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -521,7 +520,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -521,7 +520,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
else
if
(
requestMethod
==
"GET"
&&
requestURIPath
==
"/WebScan/getLastBatch"
)
else
if
(
requestMethod
==
"GET"
&&
requestURIPath
==
"/WebScan/getLastBatch"
)
{
{
std
::
string
devId
;
std
::
string
devId
;
g_manager
->
GetLastBetch
(
devId
);
GetManager
()
->
GetLastBetch
(
devId
);
char
*
result
=
new
char
[
devId
.
size
()
+
256
];
char
*
result
=
new
char
[
devId
.
size
()
+
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devId
.
c_str
());
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devId
.
c_str
());
...
@@ -533,7 +532,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -533,7 +532,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
{
{
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
devSerialNo
;
std
::
string
devSerialNo
;
g_manager
->
GetDevSerialNo
(
devId
,
devSerialNo
);
GetManager
()
->
GetDevSerialNo
(
devId
,
devSerialNo
);
char
*
result
=
new
char
[
devSerialNo
.
size
()
+
256
];
char
*
result
=
new
char
[
devSerialNo
.
size
()
+
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devSerialNo
.
c_str
());
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
devSerialNo
.
c_str
());
...
@@ -546,7 +545,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -546,7 +545,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
devId
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"pid"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"imageName"
);
std
::
string
imgName
=
HttpHead
::
GetValue
(
requestURIQueryInfos
,
"imageName"
);
std
::
string
imgBase64
;
std
::
string
imgBase64
;
g_manager
->
GetImageBase64
(
devId
,
imgName
,
imgBase64
);
GetManager
()
->
GetImageBase64
(
devId
,
imgName
,
imgBase64
);
char
*
result
=
new
char
[
imgBase64
.
size
()
+
256
];
char
*
result
=
new
char
[
imgBase64
.
size
()
+
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
imgBase64
.
c_str
());
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
imgBase64
.
c_str
());
...
@@ -563,7 +562,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -563,7 +562,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
HttpHead
::
AnalysisURIQuery
(
query
.
c_str
(),
uriQueryInfos
);
HttpHead
::
AnalysisURIQuery
(
query
.
c_str
(),
uriQueryInfos
);
}
}
g_manager
->
ResetPatchIndex
();
GetManager
()
->
ResetPatchIndex
();
char
result
[
256
];
char
result
[
256
];
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
sprintf
(
result
,
"{
\"
code
\"
:%d,
\"
msg
\"
:null,
\"
data
\"
:
\"
%s
\"
}"
,
200
,
"success"
);
...
@@ -586,7 +585,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
...
@@ -586,7 +585,7 @@ void HttpUser::HandleCmd(const HttpCmdParam* param)
int
y1
=
atoi
(
HttpHead
::
GetValue
(
uriQueryInfos
,
"y1"
).
c_str
());
int
y1
=
atoi
(
HttpHead
::
GetValue
(
uriQueryInfos
,
"y1"
).
c_str
());
int
y2
=
atoi
(
HttpHead
::
GetValue
(
uriQueryInfos
,
"y2"
).
c_str
());
int
y2
=
atoi
(
HttpHead
::
GetValue
(
uriQueryInfos
,
"y2"
).
c_str
());
std
::
string
imgName1
,
imgBase64_1
,
imgName2
,
imgBase64_2
;
std
::
string
imgName1
,
imgBase64_1
,
imgName2
,
imgBase64_2
;
g_manager
->
SplitImage
(
devId
,
imgName
,
isHorizontal
,
x1
,
y1
,
x2
,
y2
,
GetManager
()
->
SplitImage
(
devId
,
imgName
,
isHorizontal
,
x1
,
y1
,
x2
,
y2
,
imgName1
,
imgBase64_1
,
imgName2
,
imgBase64_2
);
imgName1
,
imgBase64_1
,
imgName2
,
imgBase64_2
);
char
*
result
=
new
char
[
256
+
imgName1
.
size
()
+
imgBase64_1
.
size
()
+
imgName2
.
size
()
+
imgBase64_2
.
size
()];
char
*
result
=
new
char
[
256
+
imgName1
.
size
()
+
imgBase64_1
.
size
()
+
imgName2
.
size
()
+
imgBase64_2
.
size
()];
...
@@ -625,9 +624,10 @@ void HttpUser::ThreadFunc()
...
@@ -625,9 +624,10 @@ void HttpUser::ThreadFunc()
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
else
else
...
@@ -666,9 +666,10 @@ void HttpUser::ThreadFunc()
...
@@ -666,9 +666,10 @@ void HttpUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -690,9 +691,10 @@ void HttpUser::ThreadFunc()
...
@@ -690,9 +691,10 @@ void HttpUser::ThreadFunc()
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_HTTPCMD
;
msg
.
msgId
=
WEB_MSGID_HTTPCMD
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
m_server
->
SendMsg
(
&
msg
);
bool
b
=
GetLoop
()
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
param
;
delete
param
;
...
@@ -716,9 +718,10 @@ void HttpUser::ThreadFunc()
...
@@ -716,9 +718,10 @@ void HttpUser::ThreadFunc()
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_HTTPCMD
;
msg
.
msgId
=
WEB_MSGID_HTTPCMD
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
m_server
->
SendMsg
(
&
msg
);
bool
b
=
GetLoop
()
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
[]
param
->
data
;
delete
[]
param
->
data
;
...
...
sdk/webservice/Manager.cpp
View file @
8e4ed50b
#include "Manager.h"
#include "Manager.h"
#include "MsgLoop.h"
#include "../../base/HGBuffer.h"
#include "../../base/HGBuffer.h"
#include "../../base/HGBase64.h"
#include "../../base/HGBase64.h"
#include "../../base/HGUtility.h"
#include "../../base/HGUtility.h"
...
@@ -61,110 +62,123 @@ static std::string StdStringToUtf8(const char* str)
...
@@ -61,110 +62,123 @@ static std::string StdStringToUtf8(const char* str)
#endif
#endif
}
}
Manager
::
Manager
()
Manager
::
Manager
(
class
MsgLoop
*
loop
)
{
{
HGBase_CreateLock
(
&
m_lock
)
;
m_loop
=
loop
;
m_devName
.
clear
();
m_devName
.
clear
();
SANE_Int
version_code
=
0
;
SANE_Status
status
=
sane_init_ex
(
&
version_code
,
sane_ex_callback
,
this
);
assert
(
SANE_STATUS_GOOD
==
status
);
m_devHandle
=
NULL
;
m_devHandle
=
NULL
;
m_scanInsertImgName
.
clear
();
m_scanInsertImgName
.
clear
();
m_scanIsInsert
=
false
;
m_scanIsInsert
=
false
;
m_scanEvent
=
NULL
;
m_scanEvent
=
NULL
;
m_scanParam
=
NULL
;
m_scanParam
=
NULL
;
m_scanning
=
false
;
SANE_Int
version_code
=
0
;
SANE_Status
status
=
sane_init_ex
(
&
version_code
,
sane_ex_callback
,
this
);
assert
(
SANE_STATUS_GOOD
==
status
);
}
}
Manager
::~
Manager
()
Manager
::~
Manager
()
{
{
StopScan
();
if
(
NULL
!=
m_devHandle
)
{
StopScan
();
sane_close
(
m_devHandle
);
m_devHandle
=
NULL
;
m_devName
.
clear
();
}
sane_exit
();
sane_exit
();
}
void
Manager
::
OpenDev
(
const
OpenDevParam
*
param
)
{
if
(
!
m_devName
.
empty
()
||
NULL
!=
m_devHandle
)
{
return
;
}
bool
ret
=
false
;
SANE_Status
status
=
sane_open
(
param
->
devName
.
c_str
(),
&
m_devHandle
);
if
(
SANE_STATUS_GOOD
==
status
)
{
assert
(
NULL
!=
m_devHandle
);
m_devName
=
param
->
devName
;
}
}
void
Manager
::
CloseDev
(
const
CloseDevParam
*
param
)
{
if
(
m_devName
.
empty
()
||
NULL
==
m_devHandle
||
m_devName
!=
param
->
devName
)
{
return
;
}
assert
(
NULL
!=
m_devHandle
);
StopScan
();
sane_close
(
m_devHandle
);
m_devHandle
=
NULL
;
m_devName
.
clear
();
m_devName
.
clear
();
HGBase_DestroyLock
(
m_lock
);
m_lock
=
NULL
;
}
}
bool
Manager
::
Scan
(
const
std
::
string
&
insertImgName
,
bool
isInsert
,
ScanEvent
event
,
void
*
param
)
bool
Manager
::
Scan
(
const
std
::
string
&
insertImgName
,
bool
isInsert
,
ScanEvent
event
,
void
*
param
)
{
{
assert
(
NULL
!=
event
&&
NULL
!=
param
);
assert
(
NULL
!=
event
&&
NULL
!=
param
);
bool
ret
=
false
;
if
(
m_scanning
)
HGBase_EnterLock
(
m_lock
);
if
(
NULL
!=
m_devHandle
)
{
{
sane_cancel
(
m_devHandle
);
return
false
;
sane_close
(
m_devHandle
);
m_devHandle
=
NULL
;
m_scanInsertImgName
.
clear
();
m_scanIsInsert
=
false
;
m_scanEvent
=
NULL
;
m_scanParam
=
NULL
;
}
}
m_scanInsertImgName
=
insertImgName
;
bool
ret
=
false
;
m_scanIsInsert
=
isInsert
;
if
(
NULL
!=
m_devHandle
)
m_scanEvent
=
event
;
m_scanParam
=
param
;
SANE_Status
status
=
sane_open
(
m_devName
.
c_str
(),
&
m_devHandle
);
if
(
SANE_STATUS_GOOD
==
status
)
{
{
m_scanInsertImgName
=
insertImgName
;
m_scanIsInsert
=
isInsert
;
m_scanEvent
=
event
;
m_scanParam
=
param
;
if
(
SANE_STATUS_GOOD
==
sane_start
(
m_devHandle
))
if
(
SANE_STATUS_GOOD
==
sane_start
(
m_devHandle
))
{
{
m_scanning
=
true
;
ret
=
true
;
ret
=
true
;
}
}
else
else
{
{
sane_close
(
m_devHandle
);
m_devHandle
=
NULL
;
m_scanInsertImgName
.
clear
();
m_scanInsertImgName
.
clear
();
m_scanIsInsert
=
false
;
m_scanIsInsert
=
false
;
m_scanEvent
=
NULL
;
m_scanEvent
=
NULL
;
m_scanParam
=
NULL
;
m_scanParam
=
NULL
;
}
}
}
}
else
{
m_scanInsertImgName
.
clear
();
m_scanIsInsert
=
false
;
m_scanEvent
=
NULL
;
m_scanParam
=
NULL
;
}
HGBase_LeaveLock
(
m_lock
);
return
ret
;
return
ret
;
}
}
bool
Manager
::
StopScan
()
bool
Manager
::
StopScan
()
{
{
HGBase_EnterLock
(
m_lock
);
if
(
m_scanning
)
if
(
NULL
!=
m_devHandle
)
{
{
assert
(
NULL
!=
m_devHandle
);
sane_cancel
(
m_devHandle
);
sane_cancel
(
m_devHandle
);
sane_close
(
m_devHandle
);
m_scanning
=
false
;
m_devHandle
=
NULL
;
m_scanInsertImgName
.
clear
();
m_scanInsertImgName
.
clear
();
m_scanIsInsert
=
false
;
m_scanIsInsert
=
false
;
m_scanEvent
=
NULL
;
m_scanEvent
=
NULL
;
m_scanParam
=
NULL
;
m_scanParam
=
NULL
;
}
}
HGBase_LeaveLock
(
m_lock
);
return
true
;
return
true
;
}
}
bool
Manager
::
GetCurDevId
(
std
::
string
&
devId
)
bool
Manager
::
GetCurDevId
(
std
::
string
&
devId
)
{
{
HGBase_EnterLock
(
m_lock
);
devId
=
m_devName
;
devId
=
m_devName
;
HGBase_LeaveLock
(
m_lock
);
return
true
;
return
true
;
}
}
...
@@ -217,17 +231,6 @@ bool Manager::GetImageByDevId(const std::string& devId, std::vector<std::string>
...
@@ -217,17 +231,6 @@ bool Manager::GetImageByDevId(const std::string& devId, std::vector<std::string>
bool
Manager
::
GetDevParam
(
const
std
::
string
&
devId
,
DevParam
&
devParam
)
bool
Manager
::
GetDevParam
(
const
std
::
string
&
devId
,
DevParam
&
devParam
)
{
{
HGBase_EnterLock
(
m_lock
);
SANE_Status
status
=
sane_open
(
m_devName
.
c_str
(),
&
m_devHandle
);
if
(
SANE_STATUS_GOOD
==
status
)
{
void
*
data
=
NULL
;
SANE_Int
info
;
sane_control_option
(
m_devHandle
,
0
,
SANE_ACTION_GET_VALUE
,
NULL
,
&
info
);
}
HGBase_LeaveLock
(
m_lock
);
return
true
;
return
true
;
}
}
...
@@ -641,9 +644,7 @@ bool Manager::ExchangeImage(const std::string& devId, int index1, int index2)
...
@@ -641,9 +644,7 @@ bool Manager::ExchangeImage(const std::string& devId, int index1, int index2)
bool
Manager
::
GetLastBetch
(
std
::
string
&
devId
)
bool
Manager
::
GetLastBetch
(
std
::
string
&
devId
)
{
{
HGBase_EnterLock
(
m_lock
);
devId
=
m_devName
;
devId
=
m_devName
;
HGBase_LeaveLock
(
m_lock
);
return
true
;
return
true
;
}
}
...
@@ -990,51 +991,59 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
...
@@ -990,51 +991,59 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
case
SANE_EVENT_DEVICE_ARRIVED
:
case
SANE_EVENT_DEVICE_ARRIVED
:
{
{
SANE_Device
*
sane_dev
=
(
SANE_Device
*
)
data
;
SANE_Device
*
sane_dev
=
(
SANE_Device
*
)
data
;
HGBase_EnterLock
(
p
->
m_lock
);
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"device arrive, name=%s"
,
Utf8ToStdString
(
sane_dev
->
name
).
c_str
());
if
(
p
->
m_devName
.
empty
())
OpenDevParam
*
openDevParam
=
new
OpenDevParam
;
openDevParam
->
devName
=
sane_dev
->
name
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_OPENDEV
;
msg
.
svrId
=
0
;
msg
.
usrId
=
0
;
msg
.
param
=
openDevParam
;
bool
b
=
p
->
m_loop
->
Send
(
&
msg
);
if
(
!
b
)
{
{
p
->
m_devName
=
sane_dev
->
name
;
delete
openDevParam
;
}
}
HGBase_LeaveLock
(
p
->
m_lock
);
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"device arrive, name=%s"
,
Utf8ToStdString
(
sane_dev
->
name
).
c_str
());
}
}
break
;
break
;
case
SANE_EVENT_DEVICE_LEFT
:
case
SANE_EVENT_DEVICE_LEFT
:
{
{
SANE_Device
*
sane_dev
=
(
SANE_Device
*
)
data
;
SANE_Device
*
sane_dev
=
(
SANE_Device
*
)
data
;
HGBase_EnterLock
(
p
->
m_lock
);
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"device remove, name=%s"
,
Utf8ToStdString
(
sane_dev
->
name
).
c_str
());
if
(
p
->
m_devName
==
sane_dev
->
name
)
CloseDevParam
*
closeDevParam
=
new
CloseDevParam
;
closeDevParam
->
devName
=
sane_dev
->
name
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_CLOSEDEV
;
msg
.
svrId
=
0
;
msg
.
usrId
=
0
;
msg
.
param
=
closeDevParam
;
bool
b
=
p
->
m_loop
->
Send
(
&
msg
);
if
(
!
b
)
{
{
p
->
m_devName
.
clear
()
;
delete
closeDevParam
;
}
}
HGBase_LeaveLock
(
p
->
m_lock
);
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"device remove, name=%s"
,
Utf8ToStdString
(
sane_dev
->
name
).
c_str
());
}
}
break
;
break
;
case
SANE_EVENT_STATUS
:
case
SANE_EVENT_STATUS
:
{
{
HGBase_EnterLock
(
p
->
m_lock
);
if
(
NULL
!=
p
->
m_scanEvent
)
if
(
NULL
!=
p
->
m_scanEvent
)
p
->
m_scanEvent
(
SCANEVENT_STATUS
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
p
->
m_scanEvent
(
SCANEVENT_STATUS
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
HGBase_LeaveLock
(
p
->
m_lock
);
}
}
break
;
break
;
case
SANE_EVENT_ERROR
:
case
SANE_EVENT_ERROR
:
{
{
HGBase_EnterLock
(
p
->
m_lock
);
if
(
NULL
!=
p
->
m_scanEvent
)
if
(
NULL
!=
p
->
m_scanEvent
)
p
->
m_scanEvent
(
SCANEVENT_ERROR
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
p
->
m_scanEvent
(
SCANEVENT_ERROR
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
HGBase_LeaveLock
(
p
->
m_lock
);
}
}
break
;
break
;
case
SANE_EVENT_WORKING
:
case
SANE_EVENT_WORKING
:
{
{
HGBase_EnterLock
(
p
->
m_lock
);
if
(
NULL
!=
p
->
m_scanEvent
)
if
(
NULL
!=
p
->
m_scanEvent
)
p
->
m_scanEvent
(
SCANEVENT_WORKING
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
p
->
m_scanEvent
(
SCANEVENT_WORKING
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
HGBase_LeaveLock
(
p
->
m_lock
);
}
}
break
;
break
;
case
SANE_EVENT_IMAGE_OK
:
case
SANE_EVENT_IMAGE_OK
:
...
@@ -1055,8 +1064,6 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
...
@@ -1055,8 +1064,6 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
HGBase_CreateImageFromData
(
data
,
&
imgInfo
,
nullptr
,
HGBASE_IMGTYPE_RGB
,
HGBASE_IMGORIGIN_TOP
,
&
img
);
HGBase_CreateImageFromData
(
data
,
&
imgInfo
,
nullptr
,
HGBASE_IMGTYPE_RGB
,
HGBASE_IMGORIGIN_TOP
,
&
img
);
if
(
NULL
!=
img
)
if
(
NULL
!=
img
)
{
{
HGBase_EnterLock
(
p
->
m_lock
);
std
::
string
filePath
=
GetFilePath
(
p
->
m_devName
);
std
::
string
filePath
=
GetFilePath
(
p
->
m_devName
);
std
::
vector
<
std
::
string
>
fileNameList
=
GetFileNameList
(
p
->
m_devName
);
std
::
vector
<
std
::
string
>
fileNameList
=
GetFileNameList
(
p
->
m_devName
);
...
@@ -1110,17 +1117,21 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
...
@@ -1110,17 +1117,21 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i
if
(
NULL
!=
p
->
m_scanEvent
)
if
(
NULL
!=
p
->
m_scanEvent
)
p
->
m_scanEvent
(
SCANEVENT_IMAGE
,
(
void
*
)
imgName
.
c_str
(),
(
void
*
)
imgBase64
.
c_str
(),
p
->
m_scanParam
);
p
->
m_scanEvent
(
SCANEVENT_IMAGE
,
(
void
*
)
imgName
.
c_str
(),
(
void
*
)
imgBase64
.
c_str
(),
p
->
m_scanParam
);
HGBase_LeaveLock
(
p
->
m_lock
);
HGBase_DestroyImage
(
img
);
HGBase_DestroyImage
(
img
);
}
}
}
}
break
;
break
;
case
SANE_EVENT_SCAN_FINISHED
:
case
SANE_EVENT_SCAN_FINISHED
:
{
{
HGBase_EnterLock
(
p
->
m_lock
);
if
(
NULL
!=
p
->
m_scanEvent
)
if
(
NULL
!=
p
->
m_scanEvent
)
p
->
m_scanEvent
(
SCANEVENT_FINISH
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
p
->
m_scanEvent
(
SCANEVENT_FINISH
,
(
void
*
)
data
,
(
void
*
)
0
,
p
->
m_scanParam
);
HGBase_LeaveLock
(
p
->
m_lock
);
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_STOPSCAN
;
msg
.
svrId
=
0
;
msg
.
usrId
=
0
;
msg
.
param
=
NULL
;
p
->
m_loop
->
Send
(
&
msg
);
}
}
break
;
break
;
}
}
...
...
sdk/webservice/Manager.h
View file @
8e4ed50b
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
#include "../../base/HGLock.h"
#include "../../base/HGLock.h"
#include "../../base/HGImage.h"
#include "../../base/HGImage.h"
#include "sane_ex/sane_ex.h"
#include "sane_ex/sane_ex.h"
#include "WebMsg.h"
#include <vector>
#include <vector>
#include <string>
#include <string>
...
@@ -95,9 +96,13 @@ typedef void (*ScanEvent)(HGUInt event, void *value1, void *value2, void *param)
...
@@ -95,9 +96,13 @@ typedef void (*ScanEvent)(HGUInt event, void *value1, void *value2, void *param)
class
Manager
class
Manager
{
{
public:
public:
Manager
();
Manager
(
class
MsgLoop
*
loop
);
~
Manager
();
~
Manager
();
// 打开设备
void
OpenDev
(
const
OpenDevParam
*
param
);
// 关闭设备
void
CloseDev
(
const
CloseDevParam
*
param
);
// 扫描
// 扫描
bool
Scan
(
const
std
::
string
&
insertImgName
,
bool
isInsert
,
ScanEvent
event
,
void
*
param
);
bool
Scan
(
const
std
::
string
&
insertImgName
,
bool
isInsert
,
ScanEvent
event
,
void
*
param
);
// 停止扫描
// 停止扫描
...
@@ -160,13 +165,15 @@ private:
...
@@ -160,13 +165,15 @@ private:
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
);
private:
private:
HGLock
m_lock
;
class
MsgLoop
*
m_loop
;
std
::
string
m_devName
;
std
::
string
m_devName
;
SANE_Handle
m_devHandle
;
SANE_Handle
m_devHandle
;
std
::
string
m_scanInsertImgName
;
std
::
string
m_scanInsertImgName
;
bool
m_scanIsInsert
;
bool
m_scanIsInsert
;
ScanEvent
m_scanEvent
;
ScanEvent
m_scanEvent
;
void
*
m_scanParam
;
void
*
m_scanParam
;
bool
m_scanning
;
};
};
#endif
/* __MANAGER_H__ */
#endif
/* __MANAGER_H__ */
sdk/webservice/MsgLoop.cpp
View file @
8e4ed50b
#include "MsgLoop.h"
#include "MsgLoop.h"
MsgLoop
::
MsgLoop
()
MsgLoop
::
MsgLoop
()
:
m_manager
(
this
)
,
m_wsServer
(
this
,
ServerType_Ws
,
1
)
,
m_httpServer
(
this
,
ServerType_Http
,
2
)
,
m_sockIoServer
(
this
,
ServerType_SockIo
,
3
)
{
{
HGBase_CreateEvent
(
HGTRUE
,
HGFALSE
,
&
m_msgEvent
);
HGBase_CreateEvent
(
HGTRUE
,
HGFALSE
,
&
m_msgEvent
);
HGBase_CreateLock
(
&
m_msgLock
);
HGBase_CreateLock
(
&
m_msgLock
);
...
@@ -40,6 +44,10 @@ bool MsgLoop::Send(const WebMsg* msg)
...
@@ -40,6 +44,10 @@ bool MsgLoop::Send(const WebMsg* msg)
void
MsgLoop
::
Loop
()
void
MsgLoop
::
Loop
()
{
{
m_wsServer
.
Open
(
38999
);
m_httpServer
.
Open
(
18999
);
m_sockIoServer
.
Open
(
28999
);
while
(
1
)
while
(
1
)
{
{
HGBase_WaitEvent
(
m_msgEvent
);
HGBase_WaitEvent
(
m_msgEvent
);
...
@@ -53,8 +61,51 @@ void MsgLoop::Loop()
...
@@ -53,8 +61,51 @@ void MsgLoop::Loop()
}
}
HGBase_LeaveLock
(
m_msgLock
);
HGBase_LeaveLock
(
m_msgLock
);
//
if
(
0
!=
msg
.
msgId
)
HandleMsg
(
&
msg
);
{
if
(
0
==
msg
.
svrId
)
{
assert
(
0
==
msg
.
usrId
);
if
(
WEB_MSGID_QUIT
==
msg
.
msgId
)
{
assert
(
NULL
==
msg
.
param
);
m_wsServer
.
Close
();
m_httpServer
.
Close
();
m_sockIoServer
.
Close
();
}
else
if
(
WEB_MSGID_OPENDEV
==
msg
.
msgId
)
{
assert
(
NULL
!=
msg
.
param
);
OpenDevParam
*
param
=
(
OpenDevParam
*
)
msg
.
param
;
m_manager
.
OpenDev
(
param
);
delete
param
;
}
else
if
(
WEB_MSGID_CLOSEDEV
==
msg
.
msgId
)
{
assert
(
NULL
!=
msg
.
param
);
CloseDevParam
*
param
=
(
CloseDevParam
*
)
msg
.
param
;
m_manager
.
CloseDev
(
param
);
delete
param
;
}
else
if
(
WEB_MSGID_STOPSCAN
==
msg
.
msgId
)
{
assert
(
NULL
==
msg
.
param
);
m_manager
.
StopScan
();
}
}
else
if
(
1
==
msg
.
svrId
)
{
m_wsServer
.
HandleMsg
(
&
msg
);
}
else
if
(
2
==
msg
.
svrId
)
{
m_httpServer
.
HandleMsg
(
&
msg
);
}
else
if
(
3
==
msg
.
svrId
)
{
m_sockIoServer
.
HandleMsg
(
&
msg
);
}
}
HGBase_EnterLock
(
m_msgLock
);
HGBase_EnterLock
(
m_msgLock
);
if
(
m_listMsg
.
empty
())
if
(
m_listMsg
.
empty
())
...
@@ -70,7 +121,7 @@ void MsgLoop::Loop()
...
@@ -70,7 +121,7 @@ void MsgLoop::Loop()
}
}
}
}
void
MsgLoop
::
HandleMsg
(
const
WebMsg
*
msg
)
Manager
*
MsgLoop
::
GetManager
(
)
{
{
return
&
m_manager
;
}
}
\ No newline at end of file
sdk/webservice/MsgLoop.h
View file @
8e4ed50b
...
@@ -6,6 +6,8 @@
...
@@ -6,6 +6,8 @@
#include "../../base/HGEvent.h"
#include "../../base/HGEvent.h"
#include "../../base/HGLock.h"
#include "../../base/HGLock.h"
#include "WebMsg.h"
#include "WebMsg.h"
#include "Manager.h"
#include "WebServer.h"
#include <list>
#include <list>
class
MsgLoop
class
MsgLoop
...
@@ -16,15 +18,18 @@ public:
...
@@ -16,15 +18,18 @@ public:
bool
Send
(
const
WebMsg
*
msg
);
bool
Send
(
const
WebMsg
*
msg
);
void
Loop
();
void
Loop
();
Manager
*
GetManager
();
private:
void
HandleMsg
(
const
WebMsg
*
msg
);
private:
private:
HGEvent
m_msgEvent
;
HGEvent
m_msgEvent
;
HGLock
m_msgLock
;
HGLock
m_msgLock
;
HGBool
m_bRecvMsg
;
HGBool
m_bRecvMsg
;
std
::
list
<
WebMsg
>
m_listMsg
;
std
::
list
<
WebMsg
>
m_listMsg
;
Manager
m_manager
;
WebServer
m_wsServer
;
WebServer
m_httpServer
;
WebServer
m_sockIoServer
;
};
};
#endif
/* __MSGLOOP_H__ */
#endif
/* __MSGLOOP_H__ */
\ No newline at end of file
sdk/webservice/SockIoUser.cpp
View file @
8e4ed50b
#include "SockIoUser.h"
#include "SockIoUser.h"
#include "WebServer.h"
#include "WebServer.h"
#include "MsgLoop.h"
#include "Manager.h"
#include "Manager.h"
#include "../../base/HGInfo.h"
#include "../../base/HGInfo.h"
#include "../../base/HGUtility.h"
#include "../../base/HGUtility.h"
...
@@ -7,8 +8,6 @@
...
@@ -7,8 +8,6 @@
#include "base64.h"
#include "base64.h"
#include "cJSON.h"
#include "cJSON.h"
extern
Manager
*
g_manager
;
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
SockIoUser
::
SockIoUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
SockIoUser
::
SockIoUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
#else
#else
...
@@ -54,7 +53,7 @@ void SockIoUser::HandleCmd(const SockIoCmdParam* param)
...
@@ -54,7 +53,7 @@ void SockIoUser::HandleCmd(const SockIoCmdParam* param)
cJSON_Delete
(
json
);
cJSON_Delete
(
json
);
}
}
bool
ret
=
g_manager
->
Scan
(
imgName
,
insert
,
ScanCallback
,
this
);
bool
ret
=
GetManager
()
->
Scan
(
imgName
,
insert
,
ScanCallback
,
this
);
if
(
!
ret
)
if
(
!
ret
)
{
{
std
::
string
resp
=
"42[
\"
error
\"
,
\"
scan error
\"
]"
;
std
::
string
resp
=
"42[
\"
error
\"
,
\"
scan error
\"
]"
;
...
@@ -63,12 +62,11 @@ void SockIoUser::HandleCmd(const SockIoCmdParam* param)
...
@@ -63,12 +62,11 @@ void SockIoUser::HandleCmd(const SockIoCmdParam* param)
}
}
else
if
(
"stop"
==
user
)
else
if
(
"stop"
==
user
)
{
{
bool
ret
=
g_manager
->
StopScan
();
bool
ret
=
GetManager
()
->
StopScan
();
if
(
!
ret
)
assert
(
ret
);
{
std
::
string
resp
=
"42[
\"
error
\"
,
\"
stop error
\"
]"
;
std
::
string
resp
=
"42[
\"
success
\"
,
\"
stop scan success!
\"
]"
;
SendResponse
((
const
HGByte
*
)
resp
.
c_str
(),
(
HGUInt
)
resp
.
size
(),
HGTRUE
);
SendResponse
((
const
HGByte
*
)
resp
.
c_str
(),
(
HGUInt
)
resp
.
size
(),
HGTRUE
);
}
}
}
}
}
...
@@ -109,9 +107,10 @@ void SockIoUser::ThreadFunc()
...
@@ -109,9 +107,10 @@ void SockIoUser::ThreadFunc()
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
else
else
...
@@ -153,9 +152,10 @@ void SockIoUser::ThreadFunc()
...
@@ -153,9 +152,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -180,9 +180,10 @@ void SockIoUser::ThreadFunc()
...
@@ -180,9 +180,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
else
if
((
0x80
|
0x09
)
==
headData
[
0
])
// PING帧
else
if
((
0x80
|
0x09
)
==
headData
[
0
])
// PING帧
...
@@ -211,9 +212,10 @@ void SockIoUser::ThreadFunc()
...
@@ -211,9 +212,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -223,9 +225,10 @@ void SockIoUser::ThreadFunc()
...
@@ -223,9 +225,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -235,9 +238,10 @@ void SockIoUser::ThreadFunc()
...
@@ -235,9 +238,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -247,9 +251,10 @@ void SockIoUser::ThreadFunc()
...
@@ -247,9 +251,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -264,9 +269,10 @@ void SockIoUser::ThreadFunc()
...
@@ -264,9 +269,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -298,9 +304,10 @@ void SockIoUser::ThreadFunc()
...
@@ -298,9 +304,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -336,9 +343,10 @@ void SockIoUser::ThreadFunc()
...
@@ -336,9 +343,10 @@ void SockIoUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -401,9 +409,10 @@ void SockIoUser::ThreadFunc()
...
@@ -401,9 +409,10 @@ void SockIoUser::ThreadFunc()
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_SOCKIOCMD
;
msg
.
msgId
=
WEB_MSGID_SOCKIOCMD
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
m_server
->
SendMsg
(
&
msg
);
bool
b
=
GetLoop
()
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
[]
param
->
data
;
delete
[]
param
->
data
;
...
@@ -467,9 +476,10 @@ void SockIoUser::ScanCallback(HGUInt event, void* value1, void* value2, void* pa
...
@@ -467,9 +476,10 @@ void SockIoUser::ScanCallback(HGUInt event, void* value1, void* value2, void* pa
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_SOCKIORET
;
msg
.
msgId
=
WEB_MSGID_SOCKIORET
;
msg
.
userId
=
p
->
m_id
;
msg
.
svrId
=
p
->
m_server
->
GetId
();
msg
.
usrId
=
p
->
m_id
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
p
->
m_server
->
SendMsg
(
&
msg
);
bool
b
=
p
->
GetLoop
()
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
[]
param
->
data
;
delete
[]
param
->
data
;
...
...
sdk/webservice/WebMsg.h
View file @
8e4ed50b
...
@@ -15,11 +15,15 @@
...
@@ -15,11 +15,15 @@
#define WEB_MSGID_WSRET 7
#define WEB_MSGID_WSRET 7
#define WEB_MSGID_HTTPRET 8
#define WEB_MSGID_HTTPRET 8
#define WEB_MSGID_SOCKIORET 9
#define WEB_MSGID_SOCKIORET 9
#define WEB_MSGID_OPENDEV 10
#define WEB_MSGID_CLOSEDEV 11
#define WEB_MSGID_STOPSCAN 12
struct
WebMsg
struct
WebMsg
{
{
HGUInt
msgId
;
/* WEB_MSGID_** */
HGUInt
msgId
;
/* WEB_MSGID_** */
HGUInt
userId
;
/* userId */
HGUInt
svrId
;
/* serverId */
HGUInt
usrId
;
/* userId */
HGPointer
param
;
/* param */
HGPointer
param
;
/* param */
};
};
...
@@ -59,4 +63,14 @@ struct SockIoRetParam
...
@@ -59,4 +63,14 @@ struct SockIoRetParam
HGUInt
size
;
HGUInt
size
;
};
};
struct
OpenDevParam
{
std
::
string
devName
;
};
struct
CloseDevParam
{
std
::
string
devName
;
};
#endif
/* __WEBMSG_H__ */
#endif
/* __WEBMSG_H__ */
\ No newline at end of file
sdk/webservice/WebServer.cpp
View file @
8e4ed50b
#include "WebServer.h"
#include "WebServer.h"
#include "MsgLoop.h"
#include "WsUser.h"
#include "WsUser.h"
#include "HttpUser.h"
#include "HttpUser.h"
#include "SockIoUser.h"
#include "SockIoUser.h"
#include "../../base/HGInfo.h"
#include "../../base/HGInfo.h"
WebServer
::
WebServer
(
ServerType
type
)
WebServer
::
WebServer
(
class
MsgLoop
*
loop
,
HGUInt
type
,
HGUInt
id
)
:
m_svrType
(
type
)
{
{
m_currId
=
1
;
m_loop
=
loop
;
HGBase_CreateEvent
(
HGTRUE
,
HGFALSE
,
&
m_msgEvent
);
m_type
=
type
;
HGBase_CreateLock
(
&
m_msgLock
);
m_id
=
id
;
m_bRecvMsg
=
HGFALSE
;
m_currUserId
=
1
;
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
m_sockServer
=
INVALID_SOCKET
;
m_sockServer
=
INVALID_SOCKET
;
#else
#else
...
@@ -21,33 +22,22 @@ WebServer::WebServer(ServerType type)
...
@@ -21,33 +22,22 @@ WebServer::WebServer(ServerType type)
WebServer
::~
WebServer
()
WebServer
::~
WebServer
()
{
{
HGBase_DestroyLock
(
m_msgLock
);
m_msgLock
=
NULL
;
HGBase_DestroyEvent
(
m_msgEvent
);
m_msgEvent
=
NULL
;
}
}
bool
WebServer
::
SendMsg
(
const
WebMsg
*
msg
)
class
MsgLoop
*
WebServer
::
GetLoop
(
)
{
{
if
(
NULL
==
msg
)
return
m_loop
;
{
}
return
false
;
}
bool
ret
=
false
;
HGBase_EnterLock
(
m_msgLock
);
if
(
m_bRecvMsg
)
{
m_listMsg
.
push_back
(
*
msg
);
HGBase_SetEvent
(
m_msgEvent
);
if
(
WEB_MSGID_QUIT
==
msg
->
msgId
)
HGUInt
WebServer
::
GetType
()
m_bRecvMsg
=
HGFALSE
;
{
ret
=
true
;
return
m_type
;
}
}
HGBase_LeaveLock
(
m_msgLock
);
return
ret
;
HGUInt
WebServer
::
GetId
()
{
return
m_id
;
}
}
bool
WebServer
::
Open
(
HGUShort
port
)
bool
WebServer
::
Open
(
HGUShort
port
)
...
@@ -109,24 +99,22 @@ bool WebServer::Open(HGUShort port)
...
@@ -109,24 +99,22 @@ bool WebServer::Open(HGUShort port)
return
false
;
return
false
;
}
}
HGBase_EnterLock
(
m_msgLock
);
m_bRecvMsg
=
HGTRUE
;
HGBase_LeaveLock
(
m_msgLock
);
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
);
if
(
ServerType_Ws
==
m_svrType
)
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"open websocket-server success, post=%u"
,
port
);
else
if
(
ServerType_Http
==
m_svrType
)
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"open http-server success, post=%u"
,
port
);
else
HGBase_WriteInfo
(
HGBASE_INFOTYPE_DESC
,
"open socket.io-server success, post=%u"
,
port
);
return
true
;
return
true
;
}
}
bool
WebServer
::
Close
()
bool
WebServer
::
Close
()
{
{
while
(
!
m_vectorUser
.
empty
())
{
WebUser
*
pUser
=
m_vectorUser
[
0
];
m_vectorUser
.
erase
(
m_vectorUser
.
begin
());
delete
pUser
;
pUser
=
NULL
;
}
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
if
(
INVALID_SOCKET
==
m_sockServer
)
if
(
INVALID_SOCKET
==
m_sockServer
)
#else
#else
...
@@ -148,76 +136,32 @@ bool WebServer::Close()
...
@@ -148,76 +136,32 @@ bool WebServer::Close()
return
true
;
return
true
;
}
}
void
WebServer
::
MsgLoop
()
{
while
(
1
)
{
HGBase_WaitEvent
(
m_msgEvent
);
WebMsg
msg
=
{
0
};
HGBase_EnterLock
(
m_msgLock
);
if
(
!
m_listMsg
.
empty
())
{
msg
=
m_listMsg
.
front
();
m_listMsg
.
pop_front
();
}
HGBase_LeaveLock
(
m_msgLock
);
// 处理
HandleMsg
(
&
msg
);
HGBase_EnterLock
(
m_msgLock
);
if
(
m_listMsg
.
empty
())
{
HGBase_ResetEvent
(
m_msgEvent
);
}
HGBase_LeaveLock
(
m_msgLock
);
if
(
WEB_MSGID_QUIT
==
msg
.
msgId
)
{
break
;
}
}
}
void
WebServer
::
HandleMsg
(
const
WebMsg
*
msg
)
void
WebServer
::
HandleMsg
(
const
WebMsg
*
msg
)
{
{
assert
(
NULL
!=
msg
);
assert
(
NULL
!=
msg
);
assert
(
msg
->
svrId
==
m_id
);
if
(
WEB_MSGID_QUIT
==
msg
->
msgId
)
if
(
WEB_MSGID_CONNET
==
msg
->
msgId
)
{
assert
(
0
==
msg
->
userId
);
assert
(
NULL
==
msg
->
param
);
while
(
!
m_vectorUser
.
empty
())
{
WebUser
*
pUser
=
m_vectorUser
[
0
];
m_vectorUser
.
erase
(
m_vectorUser
.
begin
());
delete
pUser
;
pUser
=
NULL
;
}
}
else
if
(
WEB_MSGID_CONNET
==
msg
->
msgId
)
{
{
assert
(
0
==
msg
->
us
e
rId
);
assert
(
0
==
msg
->
usrId
);
ConnectParam
*
param
=
(
ConnectParam
*
)
msg
->
param
;
ConnectParam
*
param
=
(
ConnectParam
*
)
msg
->
param
;
assert
(
NULL
!=
param
);
assert
(
NULL
!=
param
);
WebUser
*
user
=
NULL
;
WebUser
*
user
=
NULL
;
if
(
ServerType_Ws
==
m_
svrT
ype
)
if
(
ServerType_Ws
==
m_
t
ype
)
user
=
new
WsUser
(
this
,
m_currId
,
param
->
ip
,
param
->
port
,
param
->
socket
);
user
=
new
WsUser
(
this
,
m_curr
User
Id
,
param
->
ip
,
param
->
port
,
param
->
socket
);
else
if
(
ServerType_Http
==
m_
svrT
ype
)
else
if
(
ServerType_Http
==
m_
t
ype
)
user
=
new
HttpUser
(
this
,
m_currId
,
param
->
ip
,
param
->
port
,
param
->
socket
);
user
=
new
HttpUser
(
this
,
m_curr
User
Id
,
param
->
ip
,
param
->
port
,
param
->
socket
);
else
else
user
=
new
SockIoUser
(
this
,
m_currId
,
param
->
ip
,
param
->
port
,
param
->
socket
);
user
=
new
SockIoUser
(
this
,
m_curr
User
Id
,
param
->
ip
,
param
->
port
,
param
->
socket
);
++
m_currId
;
++
m_curr
User
Id
;
m_vectorUser
.
push_back
(
user
);
m_vectorUser
.
push_back
(
user
);
delete
param
;
delete
param
;
}
}
else
if
(
WEB_MSGID_DISCONNET
==
msg
->
msgId
)
else
if
(
WEB_MSGID_DISCONNET
==
msg
->
msgId
)
{
{
HGUInt
id
=
(
HGUInt
)
msg
->
us
e
rId
;
HGUInt
id
=
(
HGUInt
)
msg
->
usrId
;
assert
(
NULL
==
msg
->
param
);
assert
(
NULL
==
msg
->
param
);
int
nIndex
=
GetUserIndex
(
id
);
int
nIndex
=
GetUserIndex
(
id
);
...
@@ -231,7 +175,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
...
@@ -231,7 +175,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
}
}
else
if
(
WEB_MSGID_WSCMD
==
msg
->
msgId
)
else
if
(
WEB_MSGID_WSCMD
==
msg
->
msgId
)
{
{
HGUInt
id
=
(
HGUInt
)
msg
->
us
e
rId
;
HGUInt
id
=
(
HGUInt
)
msg
->
usrId
;
WsCmdParam
*
param
=
(
WsCmdParam
*
)
msg
->
param
;
WsCmdParam
*
param
=
(
WsCmdParam
*
)
msg
->
param
;
assert
(
NULL
!=
param
);
assert
(
NULL
!=
param
);
...
@@ -248,7 +192,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
...
@@ -248,7 +192,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
}
}
else
if
(
WEB_MSGID_HTTPCMD
==
msg
->
msgId
)
else
if
(
WEB_MSGID_HTTPCMD
==
msg
->
msgId
)
{
{
HGUInt
id
=
(
HGUInt
)
msg
->
us
e
rId
;
HGUInt
id
=
(
HGUInt
)
msg
->
usrId
;
HttpCmdParam
*
param
=
(
HttpCmdParam
*
)
msg
->
param
;
HttpCmdParam
*
param
=
(
HttpCmdParam
*
)
msg
->
param
;
assert
(
NULL
!=
param
);
assert
(
NULL
!=
param
);
...
@@ -265,7 +209,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
...
@@ -265,7 +209,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
}
}
else
if
(
WEB_MSGID_SOCKIOCMD
==
msg
->
msgId
)
else
if
(
WEB_MSGID_SOCKIOCMD
==
msg
->
msgId
)
{
{
HGUInt
id
=
(
HGUInt
)
msg
->
us
e
rId
;
HGUInt
id
=
(
HGUInt
)
msg
->
usrId
;
SockIoCmdParam
*
param
=
(
SockIoCmdParam
*
)
msg
->
param
;
SockIoCmdParam
*
param
=
(
SockIoCmdParam
*
)
msg
->
param
;
assert
(
NULL
!=
param
);
assert
(
NULL
!=
param
);
...
@@ -282,7 +226,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
...
@@ -282,7 +226,7 @@ void WebServer::HandleMsg(const WebMsg* msg)
}
}
else
if
(
WEB_MSGID_SOCKIORET
==
msg
->
msgId
)
else
if
(
WEB_MSGID_SOCKIORET
==
msg
->
msgId
)
{
{
HGUInt
id
=
(
HGUInt
)
msg
->
us
e
rId
;
HGUInt
id
=
(
HGUInt
)
msg
->
usrId
;
SockIoRetParam
*
param
=
(
SockIoRetParam
*
)
msg
->
param
;
SockIoRetParam
*
param
=
(
SockIoRetParam
*
)
msg
->
param
;
assert
(
NULL
!=
param
);
assert
(
NULL
!=
param
);
...
@@ -343,9 +287,10 @@ void WebServer::ThreadFunc(HGThread thread, HGPointer param)
...
@@ -343,9 +287,10 @@ void WebServer::ThreadFunc(HGThread thread, HGPointer param)
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_CONNET
;
msg
.
msgId
=
WEB_MSGID_CONNET
;
msg
.
userId
=
0
;
msg
.
svrId
=
p
->
m_id
;
msg
.
usrId
=
0
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
p
->
SendMsg
(
&
msg
);
bool
b
=
p
->
m_loop
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
msg
.
param
;
delete
msg
.
param
;
...
...
sdk/webservice/WebServer.h
View file @
8e4ed50b
...
@@ -3,44 +3,38 @@
...
@@ -3,44 +3,38 @@
#include "../../base/HGDef.h"
#include "../../base/HGDef.h"
#include "../../base/HGInc.h"
#include "../../base/HGInc.h"
#include "../../base/HGEvent.h"
#include "../../base/HGLock.h"
#include "../../base/HGThread.h"
#include "../../base/HGThread.h"
#include "WebMsg.h"
#include "WebMsg.h"
#include <string>
#include <vector>
#include <vector>
#include <list>
enum
ServerType
#define ServerType_Ws 1L
{
#define ServerType_Http 2L
ServerType_Ws
,
#define ServerType_SockIo 3L
ServerType_Http
,
ServerType_SockIo
};
class
WebServer
class
WebServer
{
{
public:
public:
WebServer
(
ServerType
type
);
WebServer
(
class
MsgLoop
*
loop
,
HGUInt
type
,
HGUInt
id
);
~
WebServer
();
~
WebServer
();
bool
SendMsg
(
const
WebMsg
*
msg
);
class
MsgLoop
*
GetLoop
();
HGUInt
GetType
();
HGUInt
GetId
();
bool
Open
(
HGUShort
port
);
bool
Open
(
HGUShort
port
);
bool
Close
();
bool
Close
();
void
MsgLoop
(
);
void
HandleMsg
(
const
WebMsg
*
msg
);
private:
private:
void
HandleMsg
(
const
WebMsg
*
msg
);
int
GetUserIndex
(
HGUInt
id
);
int
GetUserIndex
(
HGUInt
id
);
static
void
ThreadFunc
(
HGThread
thread
,
HGPointer
param
);
static
void
ThreadFunc
(
HGThread
thread
,
HGPointer
param
);
private:
private:
ServerType
m_svrType
;
class
MsgLoop
*
m_loop
;
HGUInt
m_currId
;
HGUInt
m_type
;
HGEvent
m_msgEvent
;
HGUInt
m_id
;
HGLock
m_msgLock
;
HGBool
m_bRecvMsg
;
HGUInt
m_currUserId
;
std
::
list
<
WebMsg
>
m_listMsg
;
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
SOCKET
m_sockServer
;
SOCKET
m_sockServer
;
#else
#else
...
...
sdk/webservice/WebUser.cpp
View file @
8e4ed50b
#include "WebUser.h"
#include "WebUser.h"
#include "WebServer.h"
#include "WebServer.h"
#include "MsgLoop.h"
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
WebUser
::
WebUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
WebUser
::
WebUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
...
@@ -42,6 +43,16 @@ HGUInt WebUser::GetId()
...
@@ -42,6 +43,16 @@ HGUInt WebUser::GetId()
return
m_id
;
return
m_id
;
}
}
class
MsgLoop
*
WebUser
::
GetLoop
()
{
return
m_server
->
GetLoop
();
}
class
Manager
*
WebUser
::
GetManager
()
{
return
m_server
->
GetLoop
()
->
GetManager
();
}
void
WebUser
::
ThreadFunc
(
HGThread
thread
,
HGPointer
param
)
void
WebUser
::
ThreadFunc
(
HGThread
thread
,
HGPointer
param
)
{
{
WebUser
*
p
=
(
WebUser
*
)
param
;
WebUser
*
p
=
(
WebUser
*
)
param
;
...
...
sdk/webservice/WebUser.h
View file @
8e4ed50b
...
@@ -17,6 +17,8 @@ public:
...
@@ -17,6 +17,8 @@ public:
virtual
~
WebUser
();
virtual
~
WebUser
();
HGUInt
GetId
();
HGUInt
GetId
();
class
MsgLoop
*
GetLoop
();
class
Manager
*
GetManager
();
protected:
protected:
virtual
void
ThreadFunc
()
=
0
;
virtual
void
ThreadFunc
()
=
0
;
...
...
sdk/webservice/WsUser.cpp
View file @
8e4ed50b
#include "WsUser.h"
#include "WsUser.h"
#include "WebServer.h"
#include "WebServer.h"
#include "MsgLoop.h"
#include "Manager.h"
#include "Manager.h"
#include "../../base/HGInfo.h"
#include "../../base/HGInfo.h"
#include "sha1.h"
#include "sha1.h"
#include "base64.h"
#include "base64.h"
extern
Manager
*
g_manager
;
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
WsUser
::
WsUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
WsUser
::
WsUser
(
class
WebServer
*
server
,
HGUInt
id
,
const
char
*
ip
,
uint16_t
port
,
SOCKET
sockConn
)
#else
#else
...
@@ -61,9 +60,10 @@ void WsUser::ThreadFunc()
...
@@ -61,9 +60,10 @@ void WsUser::ThreadFunc()
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
// 这里跳出,可能是服务器关闭了socketConn,或者客户端关闭了socket,或者网络断开
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
else
else
...
@@ -105,9 +105,10 @@ void WsUser::ThreadFunc()
...
@@ -105,9 +105,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -132,9 +133,10 @@ void WsUser::ThreadFunc()
...
@@ -132,9 +133,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
else
if
((
0x80
|
0x09
)
==
headData
[
0
])
// PING帧
else
if
((
0x80
|
0x09
)
==
headData
[
0
])
// PING帧
...
@@ -163,9 +165,10 @@ void WsUser::ThreadFunc()
...
@@ -163,9 +165,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -175,9 +178,10 @@ void WsUser::ThreadFunc()
...
@@ -175,9 +178,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -187,9 +191,10 @@ void WsUser::ThreadFunc()
...
@@ -187,9 +191,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -199,9 +204,10 @@ void WsUser::ThreadFunc()
...
@@ -199,9 +204,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
}
}
...
@@ -216,9 +222,10 @@ void WsUser::ThreadFunc()
...
@@ -216,9 +222,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -250,9 +257,10 @@ void WsUser::ThreadFunc()
...
@@ -250,9 +257,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -288,9 +296,10 @@ void WsUser::ThreadFunc()
...
@@ -288,9 +296,10 @@ void WsUser::ThreadFunc()
{
{
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
msgId
=
WEB_MSGID_DISCONNET
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
NULL
;
msg
.
param
=
NULL
;
m_server
->
SendMsg
(
&
msg
);
GetLoop
()
->
Send
(
&
msg
);
break
;
break
;
}
}
...
@@ -345,9 +354,10 @@ void WsUser::ThreadFunc()
...
@@ -345,9 +354,10 @@ void WsUser::ThreadFunc()
WebMsg
msg
;
WebMsg
msg
;
msg
.
msgId
=
WEB_MSGID_WSCMD
;
msg
.
msgId
=
WEB_MSGID_WSCMD
;
msg
.
userId
=
m_id
;
msg
.
svrId
=
m_server
->
GetId
();
msg
.
usrId
=
m_id
;
msg
.
param
=
param
;
msg
.
param
=
param
;
bool
b
=
m_server
->
SendMsg
(
&
msg
);
bool
b
=
GetLoop
()
->
Send
(
&
msg
);
if
(
!
b
)
if
(
!
b
)
{
{
delete
[]
param
->
data
;
delete
[]
param
->
data
;
...
...
sdk/webservice/main.cpp
View file @
8e4ed50b
#include "../../base/HGDef.h"
#include "../../base/HGDef.h"
#include "../../base/HGInc.h"
#include "../../base/HGInc.h"
#include "../../base/HGThread.h"
#include "../../base/HGThread.h"
#include "Manager.h"
#include "MsgLoop.h"
#include "WebServer.h"
Manager
*
g_manager
=
NULL
;
static
void
ThreadFunc
(
HGThread
thread
,
HGPointer
param
)
static
void
WsThreadFunc
(
HGThread
thread
,
HGPointer
param
)
{
WebServer
*
server
=
(
WebServer
*
)
param
;
if
(
server
->
Open
(
38999
))
{
server
->
MsgLoop
();
server
->
Close
();
}
}
static
void
HttpThreadFunc
(
HGThread
thread
,
HGPointer
param
)
{
{
WebServer
*
server
=
(
WebServer
*
)
param
;
(
void
)
thread
;
if
(
server
->
Open
(
18999
))
(
void
)
param
;
{
server
->
MsgLoop
();
server
->
Close
();
}
}
static
void
SockIoThreadFunc
(
HGThread
thread
,
HGPointer
param
)
MsgLoop
*
loop
=
(
MsgLoop
*
)
param
;
{
loop
->
Loop
();
WebServer
*
server
=
(
WebServer
*
)
param
;
if
(
server
->
Open
(
28999
))
{
server
->
MsgLoop
();
server
->
Close
();
}
}
}
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
...
@@ -48,29 +24,11 @@ int main()
...
@@ -48,29 +24,11 @@ int main()
assert
(
0
==
ret
);
assert
(
0
==
ret
);
#endif
#endif
g_manager
=
new
Manager
();
MsgLoop
loop
;
HGThread
thread
=
NULL
;
WebServer
wsServer
(
ServerType_Ws
);
HGBase_OpenThread
(
ThreadFunc
,
&
loop
,
&
thread
);
HGThread
wsThread
=
NULL
;
HGBase_CloseThread
(
thread
);
HGBase_OpenThread
(
WsThreadFunc
,
&
wsServer
,
&
wsThread
);
thread
=
NULL
;
WebServer
httpServer
(
ServerType_Http
);
HGThread
httpThread
=
NULL
;
HGBase_OpenThread
(
HttpThreadFunc
,
&
httpServer
,
&
httpThread
);
WebServer
sockIoServer
(
ServerType_SockIo
);
HGThread
sockIoThread
=
NULL
;
HGBase_OpenThread
(
SockIoThreadFunc
,
&
sockIoServer
,
&
sockIoThread
);
HGBase_CloseThread
(
sockIoThread
);
sockIoThread
=
NULL
;
HGBase_CloseThread
(
httpThread
);
httpThread
=
NULL
;
HGBase_CloseThread
(
wsThread
);
wsThread
=
NULL
;
delete
g_manager
;
g_manager
=
NULL
;
#if defined(HG_CMP_MSC)
#if defined(HG_CMP_MSC)
WSACleanup
();
WSACleanup
();
...
...
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