Commit 5bc5d2c1 by guanghui.cui

初始化返回值增加字段

parent 901b9e3d
...@@ -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;
......
...@@ -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]待判断数据
* 返回:... * 返回:...
......
...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment