#include "keep_live.h" #include "interface/if_tcp.h" #include "base/mycfg.h" #include "interface/if_tcp.h" #include "prot/prot_pc.h" #include "QDateTime" int keep_live_checker::dolater(int cmd,myarray data) { data.remove(0,1); QDateTime t=QDateTime::currentDateTime(); if(t.toString("yyyy-MM-dd hh:mm:ss")!=QString(data)) { // 时间不相等则设置 //qInfo()<<"set time="<(if_tcp_get()); if(cfg_->tcp_enable!=true){ qDebug("keeplive not init."); return; }else{ qDebug("keeplive init."); } if(timer_==nullptr){ timer_=new QTimer(); connect(timer_,&QTimer::timeout,this,&keep_live::timeout_slot); timer_->setInterval(1000); timer_->start(); connect(tcp,&if_tcp::tcp_connected_signal,this,&keep_live::connected_slot); connect(tcp,&if_tcp::tcp_recv_signal,this,&keep_live::recv_slot); } } void keep_live::connected_slot() { // qDebug("keeplive connected."); if(timer_!=nullptr){ timer_->setInterval(1*1000); timer_->start(); } } void keep_live::recv_slot() { // qDebug("keeplive recv."); if(timer_!=nullptr){ timer_->setInterval(30*1000); timer_->start(); } } // state 0idle,1,busy,2,failt void keep_checker::timeout_slot(){ myarray data; mycfg *cfg_=syscfg(); ProtPc *pc_=protPc(); data.append(uint8_t(cfg_->local_id)); data.append(uint8_t(pc_->busy())); data.append(myarray("正常")); pc_->send_data_slot(uint8_t(0x23),data); } void keep_coder::timeout_slot(){ myarray data; mycfg *cfg_=syscfg(); ProtPc *pc_=protPc(); data.append(uint8_t(0)); data.append(uint8_t(0xff)); data.append(uint8_t(0x03)); data.append(uint8_t(cfg_->local_id)); data.append(uint8_t(0xff)); data.append(uint8_t(0x03)); pc_->send_data_slot(uint8_t(0x8a),data); // qDebug("coder keeplive."); } keep_live *KeepLive() { static keep_live *kp=nullptr; mycfg *cfg_=syscfg(); if(kp!=nullptr){ return kp; } if(cfg_->tcp_enable){ if(cfg_->device_type=="checker"){ kp=new keep_checker(); }else if(cfg_->device_type.contains("coder",Qt::CaseInsensitive)==true){ kp=new keep_coder(); }else{ qWarning("device type err,not creat keeplive."); } if(kp!=nullptr){ QTimer::singleShot(0, kp, &keep_live::init); } } return kp; }