123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include "groupmsgbuf.h"
- #include <QDateTime>
- groupmsgbuf::groupmsgbuf()
- {
- std::string strgroupdbpath = "/home/yuchuli/groupdb.db";
- mpgroupdb = new groupdb(strgroupdbpath.data());
- }
- int groupmsgbuf::ProcGroupMsg(const iv::group::groupRequest * preq,iv::group::groupReply* reply)
- {
- iv::group::vehicleinfo xvinfo;
- if(!xvinfo.ParseFromArray(preq->xdata().data(),preq->xdata().size()))
- {
- std::cout<<"Parse Vehicle info fail"<<std::endl;
- reply->set_nres(0);
- return 0;
- }
- iv::groupmsgunit * p = NULL;
- unsigned int i;
- mMutexGroup.lock();
- for(i=0;i<mvectorgroupmsg.size();i++)
- {
- if(mvectorgroupmsg[i].strvehid == xvinfo.vehicleid())
- {
- p = &mvectorgroupmsg[i];
- p->mnLastUpdateTime = QDateTime::currentMSecsSinceEpoch();
- p->minfo.CopyFrom(xvinfo);
- break;
- }
- }
- if(p == NULL)
- {
- iv::groupmsgunit xmsgunit;
- xmsgunit.strvehid = xvinfo.vehicleid();
- xmsgunit.mnLastUpdateTime = QDateTime::currentMSecsSinceEpoch();
- xmsgunit.minfo.CopyFrom(xvinfo);
- mvectorgroupmsg.push_back(xmsgunit);
- p = &mvectorgroupmsg[mvectorgroupmsg.size()-1];
- }
- mMutexGroup.unlock();
- if(preq->ngroup() == 0)
- {
- reply->set_nres(0);
- return 0;
- }
- qint64 nNow = QDateTime::currentMSecsSinceEpoch();
- iv::group::groupinfo xgroupinfo;
- mMutexGroup.lock();
- for(i=0;i<mvectorgroupmsg.size();i++)
- {
- if((nNow - mvectorgroupmsg[i].mnLastUpdateTime) < mnDataValidTime)
- {
- if(mvectorgroupmsg[i].minfo.groupid() == preq->ngroup())
- {
- iv::group::vehicleinfo * pvinfo = xgroupinfo.add_mvehinfo();
- pvinfo->CopyFrom(mvectorgroupmsg[i].minfo);
- }
- }
- }
- mMutexGroup.unlock();
- reply->set_nres(1);
- reply->set_ngroup(preq->ngroup());
- int ndatasize = xgroupinfo.ByteSize();
- std::shared_ptr<char> pstr_buf = std::shared_ptr<char>(new char[ndatasize]);
- if(xgroupinfo.SerializeToArray(pstr_buf.get(),ndatasize))
- {
- reply->set_xdata(pstr_buf.get(),ndatasize);
- }
- else
- {
- std::cout<<" xgroupinfo serialize fail."<<std::endl;
- }
- return 1;
- }
- int groupmsgbuf::ProcQueryMsg(const iv::group::groupRequest * preq,iv::group::groupReply* reply)
- {
- (void)preq;
- qint64 nNow = QDateTime::currentMSecsSinceEpoch();
- iv::group::groupinfo xgroupinfo;
- unsigned int i;
- mMutexGroup.lock();
- for(i=0;i<mvectorgroupmsg.size();i++)
- {
- if((nNow - mvectorgroupmsg[i].mnLastUpdateTime) < mnDataValidTime)
- {
- iv::group::vehicleinfo * pvinfo = xgroupinfo.add_mvehinfo();
- pvinfo->CopyFrom(mvectorgroupmsg[i].minfo);
- }
- }
- mMutexGroup.unlock();
- reply->set_nres(1);
- reply->set_ngroup(preq->ngroup());
- int ndatasize = xgroupinfo.ByteSize();
- std::shared_ptr<char> pstr_buf = std::shared_ptr<char>(new char[ndatasize]);
- if(xgroupinfo.SerializeToArray(pstr_buf.get(),ndatasize))
- {
- reply->set_xdata(pstr_buf.get(),ndatasize);
- }
- else
- {
- std::cout<<" xgroupinfo serialize fail."<<std::endl;
- }
- return 1;
- }
|