协能can协议
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. * Packet.h
  3. *
  4. * Created on: 2016年11月10日
  5. * Author: Mr_zhu
  6. * Content:
  7. */
  8. #ifndef SERVICEMODEL_PACKET_H_
  9. #define SERVICEMODEL_PACKET_H_
  10. #include <vector>
  11. #include "../common/Type.h"
  12. #include "Base.h"
  13. #include "Item.h"
  14. class Device;
  15. class Packet
  16. {
  17. public:
  18. Packet() :
  19. m_parent(NULL)
  20. {
  21. }
  22. virtual ~Packet()
  23. {
  24. }
  25. const CLSID& getClsid() const
  26. {
  27. return m_clsid;
  28. }
  29. void setClsid(const CLSID& clsid)
  30. {
  31. this->m_clsid = clsid;
  32. }
  33. const Device* getParent() const
  34. {
  35. return m_parent;
  36. }
  37. void setParent(Device* parent)
  38. {
  39. this->m_parent = parent;
  40. }
  41. std::vector<Item*>& getVitem()
  42. {
  43. return m_vitem;
  44. }
  45. void setVitem(const std::vector<Item*>& vitem)
  46. {
  47. this->m_vitem = vitem;
  48. }
  49. Base& getBase()
  50. {
  51. return m_base;
  52. }
  53. void setBase(const Base& base)
  54. {
  55. this->m_base = base;
  56. }
  57. HRESULT addItem(Item* item)
  58. {
  59. bool isexist = false;
  60. for (Item*& i : m_vitem)
  61. {
  62. if (i->isEqual(*item))
  63. {
  64. isexist = true;
  65. break;
  66. }
  67. }
  68. if (!isexist)
  69. {
  70. m_vitem.push_back(item);
  71. return S_OK;
  72. }
  73. return S_FALSE;
  74. }
  75. ULONG getItemCount()
  76. {
  77. return m_vitem.size();
  78. }
  79. public:
  80. bool isEqual(Packet& packet)
  81. {
  82. bool bresult = true;
  83. if ((packet.getClsid() == m_clsid) && (packet.getParent() == m_parent))
  84. {
  85. return true;
  86. }
  87. else
  88. {
  89. bresult = false;
  90. }
  91. std::vector<Item*>& v = packet.getVitem();
  92. if (this->getItemCount() == packet.getItemCount())
  93. {
  94. for (unsigned int i = 0; i < m_vitem.size(); i++)
  95. {
  96. if (!(m_vitem.at(i)->isEqual(*(v.at(i)))))
  97. {
  98. bresult = false;
  99. break;
  100. }
  101. }
  102. }
  103. return bresult;
  104. }
  105. void outInfo()
  106. {
  107. }
  108. std::map<int, int>& getMregstartIndex()
  109. {
  110. return m_mregstart_index;
  111. }
  112. void setMregstartIndex(std::map<int, int>& mregstartIndex)
  113. {
  114. m_mregstart_index = mregstartIndex;
  115. }
  116. private:
  117. CLSID m_clsid;
  118. Device* m_parent;
  119. std::vector<Item*> m_vitem;
  120. std::map<int, int> m_mregstart_index;
  121. Base m_base;
  122. };
  123. #endif /* SERVICEMODEL_PACKET_H_ */