#include #include #include #include #include #include #include #include #include #include #include #include "worker.h" #include "tdoa_sync.h" #include "net-service.h" net_service::net_service() { m_loc_worker=nullptr; m_sync_worker=nullptr; m_loc_worker=worker::instance(); m_sync_worker=tdoa_sync::instance(); } net_service::~net_service() { if(m_loc_worker) m_loc_worker->stop(); } void net_service::on_message(std::shared_ptr clt,const char*data,size_t len) { //clt->send(std::move(v)); logn_bin(1,"",data,len);//输出二进制日志 zistream is(data,len-2); uint16_t cmd; is>>skip(2)>>cmd; switch(cmd) { case 0x843b://tof { uint32_t site_id; is>>site_id>>skip(12); struct timeval tv; gettimeofday(&tv,NULL); uint64_t t = tv.tv_sec*1000 + tv.tv_usec/1000; int index=0; while(!is.eof()) { uint64_t tstamp = t -1000 + 50 + index* 45; index++; task*t=task::alloc(); message_locinfo&m=t->body(); m.load(is,cmd==0x863b); m.m_time_stamp=tstamp; m.m_site_id=site_id; t->m_cmd_code=cmd; t->m_hash_id=m.m_card_id; m_loc_worker->request(t); } } break; case 0x863b://tdoa { uint32_t site_id; is>>site_id>>skip(12); while(!is.eof()) { task*t=task::alloc(); message_locinfo&m=t->body(); m.load(is,cmd==0x863b); m.m_site_id=site_id; t->m_cmd_code=cmd; t->m_hash_id=m.m_card_id; m_sync_worker->translate(m); m_loc_worker->request(t); } } break; case 0xa78d://time sync { message_tdoasync m; m.load(is); m_sync_worker->on_message(m); } //site_message::on_sync(this,t.m_param1); break; case 0x853b://tof his case 0x873b://tdoa his break; case 0x804c://ctrl site message break; } }