Commit f0661dae by wuyang.zou

Fix Bug: Plugin Connect Ods Successed, Wait Pos Request Login, Plugin Send…

Fix Bug: Plugin Connect Ods Successed, Wait Pos Request Login, Plugin Send LoginData to ODS Failed, Plugin Entry While(1)

Version 1.2.7 RC
parent 1f1651b2
...@@ -9,19 +9,27 @@ build:编译中间文件<br> ...@@ -9,19 +9,27 @@ build:编译中间文件<br>
依赖库:sqlite、cmake(2.8及以上)、gcc(4.8.2及以上)<br> 依赖库:sqlite、cmake(2.8及以上)、gcc(4.8.2及以上)<br>
##【软件准备完成后,需要配置应用的相关路径,保证CMake能够正确生成 MakeFile 文件】 ## <*...Build...*> :【软件准备完成后,需要配置应用的相关路径,保证CMake能够正确生成 MakeFile 文件】
## 查看 新编译生成的 应用文件的依赖库信息 ldd takeaway ## <*...Check...*> : 查看 新编译生成的 应用文件的依赖库信息: ldd takeaway
## <*...Running...*> : 程序启动脚本 /opt/pos/bin/run_cream.sh -> nohup /opt/pos/fmtakeout/takeaway > /dev/null &;
## 程序启动脚本 /opt/pos/bin/run_cream.sh -> nohup /opt/pos/fmtakeout/takeaway > /dev/null & ## <*...Defect...*> : 程序守护: takeaway程序将监听POS请求放到新建线程中;主线程监听ODS推送数据并及时转发给POS插件
## 程序守护: takeaway程序将监听POS请求放到新建线程中;主线程监听ODS推送数据并及时转发给POS插件; ## <*...Debug...*> : Windows 环境下重现Bug: 运行多目录,多程序,不同config.ini 启动不同模式的功能。
模拟Pos: simulatorRole=pos -> 模拟POS发送 初始化登录请求(通过读取配置文件中: 门店号 + POS号+是否主POS);
模拟Plugin:simulatorRole=plugin (非pos就是标识插件), autoLogin=true 通过读取配置文件中: 门店号 + POS号+是否主POS, 组装门店登录数据后, 自动登录
## ====Famliy Pos Plugin 版本提交历史记录==== ## ====Famliy Pos Plugin 版本提交历史记录====
3.1 2020-07-21 wuyang.zou Version:1.2.0 RC //transform field:nkbBonusBasic + nkbBonusExtra 3.1 2020-07-21 wuyang.zou Version:1.2.0 RC //transform field:nkbBonusBasic + nkbBonusExtra
3.2 2020-07-28 wuyang.zou Version:1.2.1 RC //Support Configure Domain Name Format(compatible with ip) 3.2 2020-07-28 wuyang.zou Version:1.2.1 RC //Support Configure Domain Name Format(compatible with ip)
3.3 2020-12-04 wuyang.zou Version:1.2.3 RC //Support Set Master Pos + 扫码购(203)/扫码购H5(212)/线下自动贩卖机(201) && 品牌积分支付(1010005)/集享分支付(1010006); 3.3 2020-12-04 wuyang.zou Version:1.2.3 RC //Support Set Master Pos + 扫码购(203)/扫码购H5(212)/线下自动贩卖机(201) && 品牌积分支付(1010005)/集享分支付(1010006);
3.4 2020-12-25 wuyang.zou Version:1.2.4 RC //Support Order Than Return familyRice From Channel: Fa米家 3.4 2020-12-25 wuyang.zou Version:1.2.4 RC //Support Order Than Return familyRice From Channel: Fa米家
3.5 2021-03-12 wuyang.zou Version: 1.2.6 RC //①新增动态扩展字段: extendedAttributes, 以后新增独立意义的字段时,将不需要再升级程序; ② 支付信息模块,新增 平台服务费 + 履约服务费 3.5 2021-03-12 wuyang.zou Version: 1.2.6 RC //①新增动态扩展字段: extendedAttributes, 以后新增独立意义的字段时,将不需要再升级程序; ② 支付信息模块,新增 平台服务费 + 履约服务费
3.6 2021-05-12 wuyang.zou Version: 1.2.7 RC //修复Bug: Plugin Connect ODS 服务成功后,Plugin 接受到 Pos登录请求后,转发给 ODS时出现 send Error,Plugin 就进入了 死循环等待 ODS 响应,目前Bug 已经修复。
...@@ -2,21 +2,22 @@ ...@@ -2,21 +2,22 @@
port=24446 port=24446
#<<贝瑞>> #<<贝瑞>>
#config.ini 文件 中 [ODS] 模块中的 #config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP) #(生产环境外网 IP)
#ip: 103.13.247.77 #ip: 103.13.247.77
#(测试环境外网 IP [内网IP:10.0.103.116] ) #(测试环境外网 IP [内网IP:10.0.103.116] )
#ip: 103.13.247.78 #ip: 103.13.247.78
#<<全家>> #<<全家>>
#config.ini 文件 中 [ODS] 模块中的 #config.ini 文件 中 [ODS] 模块中的
#(生产环境外网 IP [内网IP:10.0.100.70] ) #(生产环境外网 IP [内网IP:10.0.100.70] )
#ip: 103.13.247.72 #ip: 103.13.247.72
#(测试环境外网 IP [内网IP:10.0.102.14] ) #(测试环境外网 IP [内网IP:10.0.102.14] )
#ip: 103.13.247.7* #ip: 103.13.247.7*
[ODS] [ODS]
ip=127.0.0.1 ip=127.0.0.1
;ip=103.13.247.78
pushPort=30001 pushPort=30001
recvPort=30002 recvPort=30002
...@@ -26,7 +27,10 @@ socketTimeout=120 ...@@ -26,7 +27,10 @@ socketTimeout=120
ip=127.0.0.1 ip=127.0.0.1
port=24445 port=24445
;Windows 模拟程序 新增可配置功能: 配置门店号, POS号, 是否主POS标识; ;Windows 模拟程序 新增可配置功能:
;配置门店号, POS号, 是否主POS标识, 插件模拟角色: 默认是插件(可控制是否自动登录) / simulatorRole=pos 标识模拟POS发送登录请求;
;storeId=207777 ;storeId=207777
;posId=1 ;posId=1
;isMaster=false ;isMaster=false
;simulatorRole=pos
;autoLogin=true
\ No newline at end of file
...@@ -12,7 +12,7 @@ extern std::string g_pos_id; ...@@ -12,7 +12,7 @@ extern std::string g_pos_id;
extern bool g_pos_ismaster; extern bool g_pos_ismaster;
#define VERSION "1.2.6 RC" //版本号; #define VERSION "1.2.7 RC" //版本号;
class JsonModule class JsonModule
......
...@@ -24,6 +24,12 @@ INITIALIZE_EASYLOGGINGPP ...@@ -24,6 +24,12 @@ INITIALIZE_EASYLOGGINGPP
std::string pos_config_storeid; std::string pos_config_storeid;
int pos_config_posid; int pos_config_posid;
std::string pos_config_ismaster; std::string pos_config_ismaster;
std::string g_simulator_role;
bool simulator_pos_send_init_ret = false;
std::string g_simulator_pos_req_data;
std::string g_simulator_pos_resp_data;
std::string g_plugin_auto_login_init;
#endif #endif
std::string g_init_data; std::string g_init_data;
...@@ -77,31 +83,31 @@ void* listen_pos_func(void* arg) ...@@ -77,31 +83,31 @@ void* listen_pos_func(void* arg)
TCPServer server; TCPServer server;
JsonModule jsonTool; JsonModule jsonTool;
if( server.doListen(client_listen_port) ) { if( server.doListen(client_listen_port) ) { // 监控Plugin本地端口: SYS -> port [24446]
LOG(INFO) << "local listen port: [" << client_listen_port << "] successful"; LOG(INFO) << "[PosPlugin] Listen Port: [" << client_listen_port << "] successful, Recv [POS] Request" << '\n';
} else { } else {
LOG(INFO) << "local listen port: [" << client_listen_port << "] failed, maybe instance is exist,exit!!!"; LOG(INFO) << "[PosPlugin] Listen Port: [" << client_listen_port << "] Failed, Maybe Instance Is Exist, Exit!!!";
exit(0); exit(0);
} }
while(true) { while(true) { // 循环接受 POS 发送 给 Plugin 的业务请求;
TCPClient pos; TCPClient pos;
std::string posRequestData; std::string posRequestData;
std::string requestOdsData; std::string requestOdsData;
std::string responseData; std::string responseData;
if( server.accept(pos) ) { if( server.accept(pos) ) { // Socket-Accept: 监控+接受 POS发送给插件的 长连接请求 Success;
char tmpBuf[FM_BUF_SIZE] = {0}; char tmpBuf[FM_BUF_SIZE] = {0};
if( pos.read(tmpBuf, sizeof(tmpBuf)) ) { if( pos.read(tmpBuf, sizeof(tmpBuf)) ) { // Read Socket: Pos Send Login Init Request Success;
posRequestData = tmpBuf; posRequestData = tmpBuf;
// 如果为初始化请求则通过长连接socket发送 // 如果为初始化请求则通过长连接socket发送
//bool isInit=jsonTool.isInitData(posRequestData);
int reqType=jsonTool.getPushType(posRequestData.data()); int reqType=jsonTool.getPushType(posRequestData.data());
LOG(INFO)<<"pos reqType:"<<reqType; LOG(INFO)<<"Pos ReqType:"<<reqType;
if(reqType==REQUEST_TYPE_INIT) { if(reqType==REQUEST_TYPE_INIT) {
// POS请求类型:: 登录初始化;
// 如果当前内存标识: 插件已接受到, Pos发送过来的登录请求, 初始化标识完成;将断开 插件与 ODS 的长连接, 等待后面插件再与ODS重新连接
if (bInitDone) { if (bInitDone) {
LOG(INFO) << "set timeout 1"; LOG(INFO) << "set timeout 1";
longConnectionOds.setSocketTimeout(1); longConnectionOds.setSocketTimeout(1);
...@@ -131,8 +137,9 @@ void* listen_pos_func(void* arg) ...@@ -131,8 +137,9 @@ void* listen_pos_func(void* arg)
jsonTool.getPosResponseData(101, "invalid initdata!", responseData); jsonTool.getPosResponseData(101, "invalid initdata!", responseData);
} }
} else if(reqType==REQUEST_TYPE_POS_PRIORITY) { }
else if(reqType==REQUEST_TYPE_POS_PRIORITY) {
// POS请求类型:: 优先级设置;
if(bInitDone){ if(bInitDone){
//未完成,缺接口 //未完成,缺接口
bPriorityDone=false; bPriorityDone=false;
...@@ -153,12 +160,14 @@ void* listen_pos_func(void* arg) ...@@ -153,12 +160,14 @@ void* listen_pos_func(void* arg)
} }
} else if ( reqType==REQUEST_TYPE_GOODS_CHANGE) { } else if ( reqType==REQUEST_TYPE_GOODS_CHANGE) {
// POS请求类型:: 商品变更;
std::string posReq = charset_g2u(posRequestData); std::string posReq = charset_g2u(posRequestData);
LOG(INFO)<<"POS send goods change data:"<<posReq.data(); LOG(INFO)<<"POS send goods change data:"<<posReq.data();
jsonTool.getPosResponseData(100, "success", responseData); jsonTool.getPosResponseData(100, "success", responseData);
} }
else if ( OPERATION_POS_CONFIRM == reqType else if (
OPERATION_POS_CONFIRM == reqType
|| OPERATION_POS_CANCEL == reqType || OPERATION_POS_CANCEL == reqType
|| OPERATION_POS_REFUND_AGREE == reqType || OPERATION_POS_REFUND_AGREE == reqType
|| OPERATION_POS_REFUND_DISAGREE == reqType || OPERATION_POS_REFUND_DISAGREE == reqType
...@@ -173,6 +182,7 @@ void* listen_pos_func(void* arg) ...@@ -173,6 +182,7 @@ void* listen_pos_func(void* arg)
|| OPERATION_POS_COFFEE_DONE == reqType || OPERATION_POS_COFFEE_DONE == reqType
|| OPERATION_POS_COFFEE_REFUND == reqType) || OPERATION_POS_COFFEE_REFUND == reqType)
{ {
// POS请求类型:: 业务类型;
LOG(INFO)<<"REQ POS ===>> PLUGIN:"<<posRequestData.data(); LOG(INFO)<<"REQ POS ===>> PLUGIN:"<<posRequestData.data();
// 将POS请求数据转换为中台可接受数据格式 // 将POS请求数据转换为中台可接受数据格式
if( jsonTool.convertDataPos2Ods(posRequestData, requestOdsData) ) { if( jsonTool.convertDataPos2Ods(posRequestData, requestOdsData) ) {
...@@ -207,7 +217,9 @@ void* listen_pos_func(void* arg) ...@@ -207,7 +217,9 @@ void* listen_pos_func(void* arg)
jsonTool.getPosResponseData(101, "convert data to [ODS] format failed!", responseData); jsonTool.getPosResponseData(101, "convert data to [ODS] format failed!", responseData);
} }
} else if (-1 == reqType) { }
else if (-1 == reqType) {
// POS请求类型:: 重启类型;
//接收到-1,程序需要重启,关闭本进程 //接收到-1,程序需要重启,关闭本进程
LOG(INFO) << "recive exit msessage,exit!!!"; LOG(INFO) << "recive exit msessage,exit!!!";
pos.write("100"); pos.write("100");
...@@ -228,9 +240,10 @@ void* listen_pos_func(void* arg) ...@@ -228,9 +240,10 @@ void* listen_pos_func(void* arg)
if(reqType==REQUEST_TYPE_POS_PRIORITY){ if(reqType==REQUEST_TYPE_POS_PRIORITY){
bPriorityDone=true; //设置pos优先级完成 bPriorityDone=true; //设置pos优先级完成
} }
LOG(INFO)<<"SEND END"; LOG(INFO)<<"PLUGIN ===>>POS: Send End";
} else { } // Read Socket: Pos Send Login Init Request Failed;
else { // 读取 Pos 发送过来的请求数据 Failed;
/****** X86 & DEBUG 模式,才支持插件脱离POS独立运行 ******/ /****** X86 & DEBUG 模式,才支持插件脱离POS独立运行 ******/
#ifdef WIN32 #ifdef WIN32
LOG(INFO) << " Windows X86 模式 无需等待 POS 推送初始化数据"; LOG(INFO) << " Windows X86 模式 无需等待 POS 推送初始化数据";
...@@ -239,15 +252,48 @@ void* listen_pos_func(void* arg) ...@@ -239,15 +252,48 @@ void* listen_pos_func(void* arg)
#endif #endif
} }
} else { } else { // Socket-Accept: 监控+接受 POS发送给插件的 长连接动态 Failed;
LOG(INFO) << "accept pos connect failed"; LOG(INFO) << "Accept Pos Connect Failed --------> ";
} }
} }
#ifdef WIN32 #ifdef WIN32
return 0; return 0;
#endif // WIN32 #endif // WIN32
} }
#ifdef WIN32
void simulator_pos_send_init() {
JsonModule jsonTool;
TCPClient simulator_pos_client;
LOG(INFO) << " Simulator Pos Send Login Request ===>> PosPlugin " << g_simulator_pos_req_data.data();
LOG(INFO) << " Simulator Pos Connect pos_ip: " << pos_ip.c_str() << " Port:" << client_listen_port;
if (simulator_pos_client.doConnect(client_listen_port, pos_ip.c_str())) {
simulator_pos_client.setSocketTimeout(360); //设置超时
if (simulator_pos_client.write( g_simulator_pos_req_data.data() ) ){
//等待POS-Plugin返回初始化结果
char tmpBuf[FM_BUF_SIZE] = { 0 };
simulator_pos_send_init_ret = simulator_pos_client.read(tmpBuf, sizeof(tmpBuf) );
g_simulator_pos_resp_data = tmpBuf;
}
else {
jsonTool.getPosResponseData(101, "Pos Send Login Data to [PosPlugin] failed!", g_simulator_pos_req_data);
}
simulator_pos_client.close();
}
else {
jsonTool.getPosResponseData(101, "Pos Connect [PosPlugin] failed!", g_simulator_pos_req_data);
}
// TODO待加入重试机制
LOG(INFO) << "Simulator Pos Send Login Request , Get Response: " << g_simulator_pos_resp_data.data();
}
#endif
int main(int argc,char *argv[]) int main(int argc,char *argv[])
{ {
if (2 == argc && 0 == strcmp("-v", argv[1])) { if (2 == argc && 0 == strcmp("-v", argv[1])) {
...@@ -296,17 +342,51 @@ int main(int argc,char *argv[]) ...@@ -296,17 +342,51 @@ int main(int argc,char *argv[])
client_listen_port = ZIni::readInt("SYS", "port", 0, strIniPath.c_str()); client_listen_port = ZIni::readInt("SYS", "port", 0, strIniPath.c_str());
#ifdef WIN32 #ifdef WIN32
// Windows Get config.ini -> "SYS" -> "port" Value Failed;
client_listen_port = ZIni::readInt("SYS", "port", 24446, strIniPath.c_str());
g_simulator_role = ZIni::readString("POS", "simulatorRole", "", strIniPath.c_str());
g_plugin_auto_login_init = ZIni::readString("POS", "autoLogin", "false", strIniPath.c_str());
pos_config_storeid = ZIni::readString("POS", "storeId", "208888", strIniPath.c_str()); pos_config_storeid = ZIni::readString("POS", "storeId", "208888", strIniPath.c_str());
pos_config_posid = ZIni::readInt("POS", "posId", 1, strIniPath.c_str()); pos_config_posid = ZIni::readInt("POS", "posId", 1, strIniPath.c_str());
pos_config_ismaster = ZIni::readString("POS", "isMaster", "false", strIniPath.c_str()); pos_config_ismaster = ZIni::readString("POS", "isMaster", "false", strIniPath.c_str());
g_init_data = "{ \"fm_cmd\":1000,\"storeId\":\"" + pos_config_storeid + "\",\"pos_id\":\"" + std::to_string(pos_config_posid)
+ "\",\"operator_id\":\"zouwuyang\",\"business_date\":\"20201115\",\"is_master\":" + pos_config_ismaster + ",\"version\":\"" + VERSION + "\",\"listen_port\":24445 }"; if ( !g_plugin_auto_login_init.compare("false") ) {
bInitDone = false; //不自动登录,需要初始化 标识为 = false ,方便后续模拟测试;
g_init_data.clear();
}
else {
g_init_data = "{ \"fm_cmd\":1000,\"storeId\":\"" + pos_config_storeid + "\",\"pos_id\":\"" + std::to_string(pos_config_posid)
+ "\",\"operator_id\":\"zouwuyang\",\"business_date\":\"20210515\",\"is_master\":" + pos_config_ismaster + ",\"version\":\"" + VERSION + "\",\"listen_port\":24445 }";
}
LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout; LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout;
LOG(INFO) << "[POS]ip:" << pos_ip << "-listen port:" << pos_listen_port << " storeId:" << pos_config_storeid << " posId:" << pos_config_posid << " is_master:" << pos_config_ismaster; LOG(INFO) << "[POS]ip:" << pos_ip << "-listen port:" << pos_listen_port << " storeId:" << pos_config_storeid << " posId:" << pos_config_posid << " is_master:" << pos_config_ismaster;
LOG(INFO) << "[PosPlugin] Listen Port: " << client_listen_port;
#else #else
LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout; LOG(INFO) << "[ODS]ip: " << ods_ip.data() << "-push port: " << ods_push_port << "-recv port: " << ods_recv_port << "-socket timeout: " << ods_socket_timeout;
LOG(INFO) << "[POS]ip: " << pos_ip << "-listen port: " << pos_listen_port; LOG(INFO) << "[POS]ip: " << pos_ip << "-listen port: " << pos_listen_port;
LOG(INFO) << "[Local]listen port: " << client_listen_port; LOG(INFO) << "[PosPlugin] Listen Port: " << client_listen_port;
#endif
#ifdef WIN32
if ( !g_simulator_role.compare("pos") ) {
// 模拟POS向插件发送 Login 请求; 清空 WIN32 模式下的 g_init_data 初始化数据, 使其一直等待.
g_init_data.clear();
pos_config_storeid = ZIni::readString("POS", "storeId", "208888", strIniPath.c_str());
pos_config_posid = ZIni::readInt("POS", "posId", 1, strIniPath.c_str());
pos_config_ismaster = ZIni::readString("POS", "isMaster", "false", strIniPath.c_str());
g_simulator_pos_req_data = "{ \"fm_cmd\":1000, \"store_id\":\"" + pos_config_storeid + "\", \"pos_id\":\"" + std::to_string(pos_config_posid)
+ "\", \"operator_id\":\"zouwuyang\",\"business_date\":\"20210511\",\"is_master\":" + pos_config_ismaster + ",\"version\":\"" + VERSION + "\",\"listen_port\":24445 }";
while (!simulator_pos_send_init_ret) {
simulator_pos_send_init();
os_sleep(5);
}
LOG(INFO) << " simulator_pos_send_init Finished -------------Then Exit";
os_sleep(60);
exit(0);
}
#endif #endif
kill_origin_process(); //如果已有进程,杀掉 kill_origin_process(); //如果已有进程,杀掉
...@@ -344,17 +424,20 @@ int main(int argc,char *argv[]) ...@@ -344,17 +424,20 @@ int main(int argc,char *argv[])
std::string pushPosData; std::string pushPosData;
std::string responseData; std::string responseData;
// 判断是否成功连接ODS // 当 插件 与 ODS 的长连接无效时;
// ①插件将重连 ODS: ip+port; ②与ODS建立连接后 发送登录初始化请求报文 完成登录; ③登录成功后 接受ODS推送到插件上的请求数据
if( !longConnectionOds.isValid() ) { if( !longConnectionOds.isValid() ) {
// ①插件将重连 ODS : ip + port 成功;
if ( longConnectionOds.doConnect( ods_push_port, ods_ip.c_str() ) ) { if ( longConnectionOds.doConnect( ods_push_port, ods_ip.c_str() ) ) {
LOG(INFO) << "connect ODS successful"; LOG(INFO) << " Connect ODS Successful ";
longConnectionOds.setSocketTimeout(ods_socket_timeout); //设置超时时间10s longConnectionOds.setSocketTimeout(ods_socket_timeout); //设置超时时间10s
while(true) { // 注册socket信息 int waitPosInitReqTimeOutCount = 0;
while(true) { // socket: Send / Recive To ODS --> Begin
if(!g_init_data.empty()) { if(!g_init_data.empty()) {
// ②与ODS建立连接后 发送登录初始化请求报文成功 完成登录; Bug: Send Faild, Will While(1) ;
if(longConnectionOds.send(g_init_data) ) { if(longConnectionOds.send(g_init_data) ) {
longConnectionOds.receive(odsPushData); longConnectionOds.receive(odsPushData);
g_init_data_ods_back=odsPushData; g_init_data_ods_back=odsPushData;
...@@ -364,6 +447,7 @@ int main(int argc,char *argv[]) ...@@ -364,6 +447,7 @@ int main(int argc,char *argv[])
LOG(INFO) << "invalid data,close connect"; LOG(INFO) << "invalid data,close connect";
longConnectionOds.close(); //当连接到负载均衡,并没有和ods建立连接的时候。返回值为空,所以应该关闭重新连接 longConnectionOds.close(); //当连接到负载均衡,并没有和ods建立连接的时候。返回值为空,所以应该关闭重新连接
os_sleep(10); os_sleep(10);
break; // Close Socket And Need Skip While(true), Need Continue longConnectionOds.doConnect(*,*)
} }
int count=0; int count=0;
...@@ -386,21 +470,36 @@ int main(int argc,char *argv[]) ...@@ -386,21 +470,36 @@ int main(int argc,char *argv[])
break; break;
} }
else {
// ②与ODS建立连接后 发送登录初始化请求报文失败 登录失败;
//Socket Send / Recive Msg Error,Entry While(1);
LOG(INFO) << "longConnectionOds.send / Recive Faild, Can't Skip While(1), Need Close Connect And Break While( true ) ";
break;
}
} else { } else {
LOG(INFO)<<"Haven't receive init data"; LOG(INFO)<<"Haven't receive init data";
waitPosInitReqTimeOutCount++;
} }
os_sleep(10); os_sleep(10);
continue;
} if ( waitPosInitReqTimeOutCount < 6 ) {
continue; //Continue / break; 6次超时(60s) 内都继续本循环; 超过6次超时(60s) 将退出本循环,进入上一层循环进行重新连接Ods的 ip+ port;
} else {
break;
}
} // socket: Send / Recive To ODS --> End
}else { }else {
LOG(INFO) << "connect ODS failed"; // ①插件连接 ODS: ip + port 失败,将重连;
LOG(INFO) << "Connect ODS: ip + port Failed";
os_sleep(10); os_sleep(10);
continue; continue;
} }
} }
// Pos 向 ODS 发送优先级设置请求,并接受结果;
if(!bPriorityDone){ if(!bPriorityDone){
LOG(INFO)<<"ODS set priority send:"<<g_set_pos_priority.data(); LOG(INFO)<<"ODS set priority send:"<<g_set_pos_priority.data();
...@@ -411,6 +510,7 @@ int main(int argc,char *argv[]) ...@@ -411,6 +510,7 @@ int main(int argc,char *argv[])
} }
} }
// ③登录成功后 接受ODS推送到插件上的请求数据
if(longConnectionOds.receive(odsPushData) ) { if(longConnectionOds.receive(odsPushData) ) {
LOG(INFO) << "---------------- ODS ===>> PLUGIN ---------------"; LOG(INFO) << "---------------- ODS ===>> PLUGIN ---------------";
LOG(INFO) << odsPushData; LOG(INFO) << odsPushData;
......
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