|
@@ -60,16 +60,24 @@ void net_service::on_message(const std::shared_ptr<client> &clt,const char*data,
|
|
|
switch(cmd)
|
|
|
{
|
|
|
case CHAR_LOCATEDATA_TOF_EXTEND://tof-扩展
|
|
|
- case CHAR_LOCATEDATASMALL_TOF_EXTEND:
|
|
|
{
|
|
|
uint32_t site_id=-1;
|
|
|
+ uint16_t site_ct=-1;
|
|
|
uint8_t power=-1;
|
|
|
+ struct tm site_tm={0};
|
|
|
+
|
|
|
+ is>>site_id>>site_ct
|
|
|
+ >>*(uint8_t*)&site_tm.tm_sec >>*(uint8_t*)&site_tm.tm_min >>*(uint8_t*)&site_tm.tm_hour >>*(uint8_t*)&site_tm.tm_mday
|
|
|
+ >>*(uint8_t*)&site_tm.tm_mon >>*(uint8_t*)&site_tm.tm_mon >>*(uint8_t*)&site_tm.tm_year
|
|
|
+ >>skip(2)>>power;
|
|
|
+
|
|
|
+ site_tm.tm_year+=2000-1900;
|
|
|
+ site_tm.tm_mon-=1;
|
|
|
|
|
|
- is>>site_id>>skip(11)>>power;
|
|
|
auto site_ptr = sit_list::instance()->get(static_cast<int32_t>(site_id));
|
|
|
if(!site_ptr)
|
|
|
{
|
|
|
- logn_error(1,"在全局分站列表中找不到分站:%d", site_id);
|
|
|
+ logn_error(1,"在全局分站列表中找不到分站:%s,%d", site_id);
|
|
|
break;
|
|
|
}
|
|
|
if(site_ptr->is_abnormal_site())
|
|
@@ -80,17 +88,18 @@ void net_service::on_message(const std::shared_ptr<client> &clt,const char*data,
|
|
|
|
|
|
{
|
|
|
char timebuf[64]{0};
|
|
|
- unsigned char*t=(unsigned char*)data+10;
|
|
|
- sprintf(timebuf,"%d-%02d-%02d %02d:%02d:%02d",t[6]+2000,t[5],t[3],t[2],t[1],t[0]);
|
|
|
- logn_info(1,"分站数据信息:%s net=%s,sid=%d,tm=%s,sct=%d",(power&1)==0?"true":"false",clt->name().c_str(),site_id,timebuf,t[-2]*256+t[-1]);
|
|
|
- }
|
|
|
+ strftime(timebuf,64,"%F %T",&site_tm);
|
|
|
+ logn_info(1,"分站数据信息:%s net=%s,sid=%d,tm=%s,sct=%d",(power&1)==0?"true":"false",
|
|
|
+ clt->name().c_str(),site_id,timebuf,site_ct);
|
|
|
|
|
|
- if(!site_ptr->check_timestamp(data+10))
|
|
|
- {
|
|
|
- char timebuf[64]{0};
|
|
|
- unsigned char*t=(unsigned char*)&site_ptr->m_timestamp[0];
|
|
|
- sprintf(timebuf,"%d-%02d-%02d %02d:%02d:%02d",t[0]+2000,t[1],t[2],t[3],t[4],t[5]);
|
|
|
- logn_error(1,"分站数据时间戳错误:%s,pre-time=%s",clt->name().c_str(),timebuf);
|
|
|
+ time_t site_time=mktime(&site_tm);
|
|
|
+ double diff=difftime(site_time, site_ptr->last_site_time());
|
|
|
+ if(diff<-3) //允许2秒的时间抖动
|
|
|
+ {
|
|
|
+ logn_error(1,"分站时间回退,数据将被丢弃:%s,diff=%d",clt->name().c_str(),(int)diff);
|
|
|
+ }
|
|
|
+
|
|
|
+ site_ptr->set_site_time(site_time);
|
|
|
}
|
|
|
|
|
|
if(clt->type()!=2){
|