groupmsgbuf.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include "groupmsgbuf.h"
  2. #include <QDateTime>
  3. groupmsgbuf::groupmsgbuf()
  4. {
  5. std::string strgroupdbpath = "/home/yuchuli/groupdb.db";
  6. mpgroupdb = new groupdb(strgroupdbpath.data());
  7. }
  8. int groupmsgbuf::ProcGroupMsg(const iv::group::groupRequest * preq,iv::group::groupReply* reply)
  9. {
  10. iv::group::vehicleinfo xvinfo;
  11. if(!xvinfo.ParseFromArray(preq->xdata().data(),preq->xdata().size()))
  12. {
  13. std::cout<<"Parse Vehicle info fail"<<std::endl;
  14. reply->set_nres(0);
  15. return 0;
  16. }
  17. iv::groupmsgunit * p = NULL;
  18. unsigned int i;
  19. mMutexGroup.lock();
  20. for(i=0;i<mvectorgroupmsg.size();i++)
  21. {
  22. if(mvectorgroupmsg[i].strvehid == xvinfo.vehicleid())
  23. {
  24. p = &mvectorgroupmsg[i];
  25. p->mnLastUpdateTime = QDateTime::currentMSecsSinceEpoch();
  26. p->minfo.CopyFrom(xvinfo);
  27. break;
  28. }
  29. }
  30. if(p == NULL)
  31. {
  32. iv::groupmsgunit xmsgunit;
  33. xmsgunit.strvehid = xvinfo.vehicleid();
  34. xmsgunit.mnLastUpdateTime = QDateTime::currentMSecsSinceEpoch();
  35. xmsgunit.minfo.CopyFrom(xvinfo);
  36. mvectorgroupmsg.push_back(xmsgunit);
  37. p = &mvectorgroupmsg[mvectorgroupmsg.size()-1];
  38. }
  39. mMutexGroup.unlock();
  40. if(preq->ngroup() == 0)
  41. {
  42. reply->set_nres(0);
  43. return 0;
  44. }
  45. qint64 nNow = QDateTime::currentMSecsSinceEpoch();
  46. iv::group::groupinfo xgroupinfo;
  47. mMutexGroup.lock();
  48. for(i=0;i<mvectorgroupmsg.size();i++)
  49. {
  50. if((nNow - mvectorgroupmsg[i].mnLastUpdateTime) < mnDataValidTime)
  51. {
  52. if(mvectorgroupmsg[i].minfo.groupid() == preq->ngroup())
  53. {
  54. iv::group::vehicleinfo * pvinfo = xgroupinfo.add_mvehinfo();
  55. pvinfo->CopyFrom(mvectorgroupmsg[i].minfo);
  56. }
  57. }
  58. }
  59. mMutexGroup.unlock();
  60. reply->set_nres(1);
  61. reply->set_ngroup(preq->ngroup());
  62. int ndatasize = xgroupinfo.ByteSize();
  63. std::shared_ptr<char> pstr_buf = std::shared_ptr<char>(new char[ndatasize]);
  64. if(xgroupinfo.SerializeToArray(pstr_buf.get(),ndatasize))
  65. {
  66. reply->set_xdata(pstr_buf.get(),ndatasize);
  67. }
  68. else
  69. {
  70. std::cout<<" xgroupinfo serialize fail."<<std::endl;
  71. }
  72. return 1;
  73. }
  74. int groupmsgbuf::ProcQueryMsg(const iv::group::groupRequest * preq,iv::group::groupReply* reply)
  75. {
  76. (void)preq;
  77. qint64 nNow = QDateTime::currentMSecsSinceEpoch();
  78. iv::group::groupinfo xgroupinfo;
  79. unsigned int i;
  80. mMutexGroup.lock();
  81. for(i=0;i<mvectorgroupmsg.size();i++)
  82. {
  83. if((nNow - mvectorgroupmsg[i].mnLastUpdateTime) < mnDataValidTime)
  84. {
  85. iv::group::vehicleinfo * pvinfo = xgroupinfo.add_mvehinfo();
  86. pvinfo->CopyFrom(mvectorgroupmsg[i].minfo);
  87. }
  88. }
  89. mMutexGroup.unlock();
  90. reply->set_nres(1);
  91. reply->set_ngroup(preq->ngroup());
  92. int ndatasize = xgroupinfo.ByteSize();
  93. std::shared_ptr<char> pstr_buf = std::shared_ptr<char>(new char[ndatasize]);
  94. if(xgroupinfo.SerializeToArray(pstr_buf.get(),ndatasize))
  95. {
  96. reply->set_xdata(pstr_buf.get(),ndatasize);
  97. }
  98. else
  99. {
  100. std::cout<<" xgroupinfo serialize fail."<<std::endl;
  101. }
  102. return 1;
  103. }