Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
familyMart_takeaway
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guanghui.cui
familyMart_takeaway
Commits
5bc5d2c1
Commit
5bc5d2c1
authored
Mar 19, 2018
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
初始化返回值增加字段
parent
901b9e3d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
95 additions
and
3 deletions
+95
-3
src/JsonModule.cpp
+62
-0
src/JsonModule.h
+6
-0
src/main.cpp
+27
-3
No files found.
src/JsonModule.cpp
View file @
5bc5d2c1
...
@@ -537,6 +537,68 @@ bool JsonModule::checkInitData(const std::string &data, int &posListenPort)
...
@@ -537,6 +537,68 @@ bool JsonModule::checkInitData(const std::string &data, int &posListenPort)
return
true
;
return
true
;
}
}
bool
JsonModule
::
getInitBackData
(
IN
const
char
*
inJson
,
OUT
std
::
string
&
outJson
)
{
rapidjson
::
Document
document
;
// 定义一个Document对象
document
.
Parse
(
inJson
);
// 解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
// 通过HasParseError()来判断解析是否成功
{
LOG
(
ERROR
)
<<
"getInitBackData JSON parse error:"
<<
document
.
GetParseError
()
<<
":"
<<
document
.
GetErrorOffset
();
return
false
;
}
if
(
document
.
HasMember
(
"fm_cmd"
))
{
rapidjson
::
Value
&
fm_cmd
=
document
[
"fm_cmd"
];
int
reqType
=
fm_cmd
.
GetInt
();
if
(
reqType
==
REQUEST_TYPE_INIT
){
int
status_code
=
0
,
autoconfirm
=
0
;
std
::
string
default_pos
,
msg
;
if
(
document
.
HasMember
(
"status_code"
)){
status_code
=
document
[
"status_code"
].
GetInt
();
}
if
(
document
.
HasMember
(
"autoconfirm"
)){
autoconfirm
=
document
[
"autoconfirm"
].
GetInt
();
}
if
(
document
.
HasMember
(
"default_pos"
)){
default_pos
=
document
[
"default_pos"
].
GetString
();
}
if
(
100
==
status_code
){
msg
=
"success"
;
}
else
{
msg
=
"failed"
;
}
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
Writer
<
rapidjson
::
StringBuffer
>
writer
(
buffer
);
writer
.
StartObject
();
writer
.
Key
(
"status_code"
);
writer
.
Int
(
status_code
);
writer
.
Key
(
"autoconfirm"
);
writer
.
Int
(
autoconfirm
);
writer
.
Key
(
"default_pos"
);
writer
.
String
(
default_pos
.
c_str
());
writer
.
Key
(
"msg"
);
writer
.
String
(
msg
.
c_str
());
writer
.
EndObject
();
outJson
=
buffer
.
GetString
();
return
true
;
}
}
return
false
;
}
bool
JsonModule
::
getPosResponseData
(
int
status
,
const
std
::
string
&
msg
,
std
::
string
&
result
)
bool
JsonModule
::
getPosResponseData
(
int
status
,
const
std
::
string
&
msg
,
std
::
string
&
result
)
{
{
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
StringBuffer
buffer
;
...
...
src/JsonModule.h
View file @
5bc5d2c1
...
@@ -22,6 +22,12 @@ public:
...
@@ -22,6 +22,12 @@ public:
* */
* */
bool
isInitData
(
IN
const
std
::
string
&
data
);
bool
isInitData
(
IN
const
std
::
string
&
data
);
/* 功能:获取初始化返回数据
* 参数:[1]返回json数据 [2]pos需要的json数据
* 返回:是否正确格式
* */
bool
getInitBackData
(
IN
const
char
*
inJson
,
OUT
std
::
string
&
outJson
);
/* 功能:判断是否是心跳包
/* 功能:判断是否是心跳包
* 参数:[1]待判断数据
* 参数:[1]待判断数据
* 返回:...
* 返回:...
...
...
src/main.cpp
View file @
5bc5d2c1
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
INITIALIZE_EASYLOGGINGPP
INITIALIZE_EASYLOGGINGPP
std
::
string
g_init_data
;
std
::
string
g_init_data
;
std
::
string
g_init_data_ods_back
;
std
::
string
ods_ip
;
std
::
string
ods_ip
;
std
::
string
pos_ip
=
"127.0.0.1"
;
std
::
string
pos_ip
=
"127.0.0.1"
;
...
@@ -22,6 +23,7 @@ int client_listen_port;
...
@@ -22,6 +23,7 @@ int client_listen_port;
int
pos_listen_port
;
int
pos_listen_port
;
std
::
vector
<
orderSendFailedObj
>
vecFailedOrders
;
std
::
vector
<
orderSendFailedObj
>
vecFailedOrders
;
bool
bRetryThreadRunning
=
false
;
//retry线程是否正在运行
bool
bRetryThreadRunning
=
false
;
//retry线程是否正在运行
bool
bInitDone
=
false
;
//初始化完成
SQLite
sqlite
;
SQLite
sqlite
;
//函数,订单信息发送给pos
//函数,订单信息发送给pos
...
@@ -68,13 +70,26 @@ void* listen_pos_func(void* arg)
...
@@ -68,13 +70,26 @@ void* listen_pos_func(void* arg)
{
{
posRequestData
=
tmpBuf
;
posRequestData
=
tmpBuf
;
// 如果为初始化请求则通过长连接socket发送
// 如果为初始化请求则通过长连接socket发送
if
(
jsonTool
.
isInitData
(
posRequestData
)
)
bool
isInit
=
jsonTool
.
isInitData
(
posRequestData
);
if
(
isInit
)
{
{
bInitDone
=
false
;
if
(
jsonTool
.
checkInitData
(
posRequestData
,
pos_listen_port
)
)
if
(
jsonTool
.
checkInitData
(
posRequestData
,
pos_listen_port
)
)
{
{
g_init_data
=
posRequestData
;
g_init_data
=
posRequestData
;
jsonTool
.
getPosResponseData
(
100
,
"successful!"
,
responseData
);
jsonTool
.
getPosResponseData
(
100
,
"successful!"
,
responseData
);
LOG
(
INFO
)
<<
"POS init data:"
<<
g_init_data
.
c_str
();
LOG
(
INFO
)
<<
"POS init data:"
<<
g_init_data
.
c_str
();
//等待ods返回初始化结果
while
(
true
){
if
(
!
g_init_data_ods_back
.
empty
()){
jsonTool
.
getInitBackData
(
g_init_data_ods_back
.
data
(),
responseData
);
break
;
}
else
{
LOG
(
INFO
)
<<
"wait for ods init back data"
;
sleep
(
1
);
}
}
}
else
}
else
{
{
jsonTool
.
getPosResponseData
(
101
,
"invalid initdata!"
,
responseData
);
jsonTool
.
getPosResponseData
(
101
,
"invalid initdata!"
,
responseData
);
...
@@ -94,8 +109,7 @@ void* listen_pos_func(void* arg)
...
@@ -94,8 +109,7 @@ void* listen_pos_func(void* arg)
std
::
string
tmp
;
std
::
string
tmp
;
if
(
ods
.
receive
(
tmp
)
)
if
(
ods
.
receive
(
tmp
)
)
{
{
jsonTool
.
getPosResponseData
(
tmp
,
responseData
);
jsonTool
.
getPosResponseData
(
tmp
,
responseData
);
LOG
(
INFO
)
<<
"ODS response data:"
<<
responseData
.
data
();
}
else
}
else
{
{
jsonTool
.
getPosResponseData
(
101
,
"receive data from [ODS] failed!"
,
responseData
);
jsonTool
.
getPosResponseData
(
101
,
"receive data from [ODS] failed!"
,
responseData
);
...
@@ -117,8 +131,12 @@ void* listen_pos_func(void* arg)
...
@@ -117,8 +131,12 @@ void* listen_pos_func(void* arg)
}
}
// TODO待加入重试机制
// TODO待加入重试机制
LOG
(
INFO
)
<<
"ODS response data:"
<<
responseData
.
data
();
pos
.
write
(
responseData
.
c_str
());
pos
.
write
(
responseData
.
c_str
());
pos
.
close
();
pos
.
close
();
if
(
isInit
){
bInitDone
=
true
;
//初始化完成,可以接收订单
}
}
else
}
else
{
{
LOG
(
INFO
)
<<
"recv pos pushDate failed"
;
LOG
(
INFO
)
<<
"recv pos pushDate failed"
;
...
@@ -238,10 +256,16 @@ int main()
...
@@ -238,10 +256,16 @@ int main()
if
(
!
g_init_data
.
empty
())
if
(
!
g_init_data
.
empty
())
{
{
g_init_data_ods_back
.
clear
();
if
(
ods
.
send
(
g_init_data
)
)
if
(
ods
.
send
(
g_init_data
)
)
{
{
ods
.
receive
(
odsPushData
);
ods
.
receive
(
odsPushData
);
g_init_data_ods_back
=
odsPushData
;
LOG
(
INFO
)
<<
"ODS init back:"
<<
odsPushData
.
data
();
LOG
(
INFO
)
<<
"ODS init back:"
<<
odsPushData
.
data
();
while
(
!
bInitDone
){
LOG
(
INFO
)
<<
"wait for init done"
;
sleep
(
1
);
}
//检测是否有发送失败的订单,如果有的话,启动线程,先发送原先失败的订单
//检测是否有发送失败的订单,如果有的话,启动线程,先发送原先失败的订单
sqlite
.
query
(
"select * from fmOrderFailed"
,
vecFailedOrders
);
sqlite
.
query
(
"select * from fmOrderFailed"
,
vecFailedOrders
);
...
...
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