|
@@ -17,9 +17,129 @@ groupmsgbuf::groupmsgbuf()
|
|
|
|
|
|
}
|
|
|
|
|
|
+groupmsgbuf::~groupmsgbuf()
|
|
|
+{
|
|
|
+ if(gbSaveToDB)
|
|
|
+ {
|
|
|
+ delete mpgroupdb;
|
|
|
+ }
|
|
|
+ qDebug("groupmsgbuf close.");
|
|
|
+}
|
|
|
+
|
|
|
+void groupmsgbuf::WriteIVDData(char *str, int nsize, std::string strmemname, qint64 msgtime,QByteArray & ba)
|
|
|
+{
|
|
|
+ int nTotalSize,nHeadSize,nNameSize,nDataSize;
|
|
|
+ nHeadSize = sizeof(iv::RecordHead);
|
|
|
+ nNameSize = strnlen(strmemname.data(),255);
|
|
|
+ nDataSize = nsize;
|
|
|
+ nTotalSize = nHeadSize + nNameSize + nDataSize + 4*sizeof(int);
|
|
|
+ int nInfoStart;
|
|
|
+ nInfoStart = 4*sizeof(int);
|
|
|
+ char * strdata = new char[1+nTotalSize];
|
|
|
+ *strdata = 0x23;
|
|
|
+ memcpy(strdata+1,&nTotalSize,sizeof(int));
|
|
|
+ memcpy(strdata+1+1*sizeof(int),&nHeadSize,sizeof(int));
|
|
|
+ memcpy(strdata+1+2*sizeof(int),&nNameSize,sizeof(int));
|
|
|
+ memcpy(strdata+1+3*sizeof(int),&nDataSize,sizeof(int));
|
|
|
+
|
|
|
+ iv::RecordHead ird;
|
|
|
+ ird.mnDataIndex = mnIndex;mnIndex++;
|
|
|
+ QDateTime Xdt = QDateTime::fromMSecsSinceEpoch(msgtime);
|
|
|
+ QDateTime * dt = &Xdt;
|
|
|
+ ird.mDay = dt->date().day();
|
|
|
+ ird.mHour = dt->time().hour();
|
|
|
+ ird.mMin = dt->time().minute();
|
|
|
+ ird.mMon = dt->date().month();
|
|
|
+ ird.mSec = dt->time().second();
|
|
|
+ ird.mMSec = dt->time().msec();
|
|
|
+ ird.mYear = dt->date().year();
|
|
|
+ ird.mnTime = 0;
|
|
|
+
|
|
|
+ int iPos = 1+4*sizeof(int);
|
|
|
+ memcpy(strdata+iPos,&ird,sizeof(iv::RecordHead));iPos = iPos+sizeof(iv::RecordHead);
|
|
|
+ if(nNameSize >0)
|
|
|
+ {
|
|
|
+ memcpy(strdata+iPos,strmemname.data(),nNameSize);iPos = iPos+nNameSize;
|
|
|
+ }
|
|
|
+ memcpy(strdata+iPos,str,nsize);
|
|
|
+
|
|
|
+ ba.append(strdata,1+nTotalSize);
|
|
|
+
|
|
|
+ delete strdata;
|
|
|
+}
|
|
|
+
|
|
|
+int groupmsgbuf::VehInfoToIVD(iv::group::vehicleinfo &xvinfo,qint64 msgtime, QByteArray &ba)
|
|
|
+{
|
|
|
+ int nHave = 0;
|
|
|
+
|
|
|
+ if(xvinfo.has_mbrainstate())
|
|
|
+ {
|
|
|
+ int nsize = xvinfo.mbrainstate().ByteSize();
|
|
|
+ std::shared_ptr<char> pstr_data = std::shared_ptr<char>(new char[nsize]);
|
|
|
+ if(xvinfo.mbrainstate().SerializeToArray(pstr_data.get(),nsize))
|
|
|
+ {
|
|
|
+ nHave++;
|
|
|
+ WriteIVDData(pstr_data.get(),nsize,"brainstate",msgtime,ba);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<"groupmsgbuf::VehInfoToIVD serialize brainstate fail."<<std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(xvinfo.has_mcarstate())
|
|
|
+ {
|
|
|
+ int nsize = xvinfo.mcarstate().ByteSize();
|
|
|
+ std::shared_ptr<char> pstr_data = std::shared_ptr<char>(new char[nsize]);
|
|
|
+ if(xvinfo.mcarstate().SerializeToArray(pstr_data.get(),nsize))
|
|
|
+ {
|
|
|
+ nHave++;
|
|
|
+ WriteIVDData(pstr_data.get(),nsize,"carstate",msgtime,ba);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<"groupmsgbuf::VehInfoToIVD serialize carstate fail."<<std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(xvinfo.has_mgpsimu())
|
|
|
+ {
|
|
|
+ int nsize = xvinfo.mgpsimu().ByteSize();
|
|
|
+ std::shared_ptr<char> pstr_data = std::shared_ptr<char>(new char[nsize]);
|
|
|
+ if(xvinfo.mgpsimu().SerializeToArray(pstr_data.get(),nsize))
|
|
|
+ {
|
|
|
+ nHave++;
|
|
|
+ WriteIVDData(pstr_data.get(),nsize,"hcp2_gpsimu",msgtime,ba);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<"groupmsgbuf::VehInfoToIVD serialize brainstate fail."<<std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(xvinfo.has_mdecition())
|
|
|
+ {
|
|
|
+ int nsize = xvinfo.mdecition().ByteSize();
|
|
|
+ std::shared_ptr<char> pstr_data = std::shared_ptr<char>(new char[nsize]);
|
|
|
+ if(xvinfo.mdecition().SerializeToArray(pstr_data.get(),nsize))
|
|
|
+ {
|
|
|
+ nHave++;
|
|
|
+ WriteIVDData(pstr_data.get(),nsize,"deciton",msgtime,ba);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ std::cout<<"groupmsgbuf::VehInfoToIVD serialize brainstate fail."<<std::endl;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return nHave;
|
|
|
+}
|
|
|
+
|
|
|
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;
|
|
@@ -30,9 +150,12 @@ int groupmsgbuf::ProcGroupMsg(const iv::group::groupRequest * preq,iv::group::gr
|
|
|
if(gbSaveToDB)
|
|
|
{
|
|
|
QByteArray ba;
|
|
|
- ba.append(preq->xdata().data(),preq->xdata().size());
|
|
|
- mpgroupdb->addmsg(QDateTime::currentMSecsSinceEpoch(),preq->strvehid(),preq->msgtime(),preq->ngroup(),
|
|
|
+ if(VehInfoToIVD(xvinfo,preq->msgtime(), ba)>0)
|
|
|
+ {
|
|
|
+ // ba.append(preq->xdata().data(),preq->xdata().size());
|
|
|
+ mpgroupdb->addmsg(QDateTime::currentMSecsSinceEpoch(),preq->strvehid(),preq->msgtime(),preq->ngroup(),
|
|
|
preq->intragroupid(),ba);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|