SyncManager.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #pragma once
  2. #include <unordered_map>
  3. #include <map>
  4. #include <deque>
  5. #include <iostream>
  6. #include "SyncTimeMsg.h"
  7. #include "Position.h"
  8. #include "Common.h"
  9. #include "SyncTime.h"
  10. #include "SyncHelper.h"
  11. #include "TagMsg.h"
  12. using namespace std;
  13. namespace HostServer{
  14. class SyncManager
  15. {
  16. struct SyncTimeMsgItem
  17. {
  18. unsigned short SyncNum;
  19. unordered_map<unsigned long long, SyncTimeMsg> SyncTimeMsgs;
  20. };
  21. struct SyncTimeItem
  22. {
  23. unsigned short SyncNum;
  24. unordered_map<unsigned long long, SyncTime> HistSync;
  25. };
  26. CRITICAL_SECTION m_csSyncTime;
  27. CRITICAL_SECTION m_csCalcLiner;
  28. public:
  29. SyncManager();
  30. ~SyncManager();
  31. //************************************
  32. // Description: 用于初始化所有成员
  33. // Method: init
  34. // Returns: void
  35. //************************************
  36. void init();
  37. //************************************
  38. // Description: 用于解析时间同步msg中的内容
  39. // Method: analyzeMsg
  40. // Returns: void
  41. // Parameter: SyncTimeMsg & msg 从socket获取的消息
  42. //************************************
  43. void analyzeSyncMsg(SyncTimeMsg &msg);
  44. //************************************
  45. // Description: 更新距离信息
  46. // Method: updateDistance
  47. // Returns: void
  48. // Parameter: unsigned int localId 当前分站号
  49. // Parameter: unsigned char localAntNum 当前分站的天线号
  50. // Parameter: unsigned int upperId 上级分站号
  51. // Parameter: unsigned char uppderAntNum 上级分站的天线号
  52. // Parameter: int d 距离
  53. //************************************
  54. void updateDistance(unsigned int localId, unsigned char localAntNum, unsigned int upperId, unsigned char uppderAntNum, double d);
  55. //************************************
  56. // Description: 更新anchor信息
  57. // Method: updateAnchor
  58. // Returns: void
  59. // Parameter: unsigned int localId 当前分站号
  60. // Parameter: unsigned char localAntNum 当前分站的天线号
  61. // Parameter: int x
  62. // Parameter: int y
  63. // Parameter: int z
  64. //************************************
  65. void updateAnchor(unsigned int localId, unsigned char localAntNum, double x, double y, double z);
  66. //************************************
  67. // Description: 删除anchor
  68. // Method: deleteAnchor
  69. // Returns: void
  70. // Parameter: unsigned int localId 当前分站号
  71. // Parameter: unsigned char localAntNum 当前分站的天线号
  72. //************************************
  73. void deleteAnchor(unsigned int localId, unsigned char localAntNum);
  74. // unsigned long long代表anchor编码 ID+AntNum
  75. unordered_map<unsigned long long, Position> _anchors;
  76. // unsigned long long 代表anchor编码 ID+AntNum
  77. unordered_map<unsigned long long,unordered_map<unsigned long long, double>> _distance;
  78. // with root
  79. // 使用_syncTimeMsgs[SyncNum][LocalIdCode]访问对应的SyncTimeMsg,即同步时间消息
  80. unordered_map<unsigned long long, deque<SyncTimeMsgItem>> _syncTimeMsgs;
  81. // 使用_historySync[SyncNum][LocalIdCode]访问对应的SyncTime,即计算后的时间同步
  82. unordered_map<unsigned long long, deque<SyncTimeItem>> _historySync;
  83. //************************************
  84. // Description: 根据Tag的记录和历史msg,利用线性插值算法计算Tag的预估时间
  85. // Method: calTimeByLinar
  86. // Returns: unsigned long long
  87. // Parameter: unsigned long long tagReceiveTime tag的接收时间
  88. // Parameter: unsigned short SyncNum 接收tag时的时间同步编号
  89. // Parameter: unsigned long long localIdCode 接收tag的anchorID编码
  90. //************************************
  91. unsigned long long calTimeByLinar(TagMsg &tag);
  92. //************************************
  93. // Method: updateSync
  94. // Returns: bool
  95. // Parameter: unsigned long long rootIdCode
  96. // Parameter: unsigned short SyncNum
  97. // Parameter: unsigned long long localIdCode
  98. //************************************
  99. bool updateSync(unsigned long long rootIdCode, int idx, unsigned short SyncNum, unsigned long long localIdCode);
  100. int FindSyncTimeMsg(unsigned long long rootIdCode, unsigned short SyncNum);
  101. int FindSyncTime(unsigned long long rootIdCode, unsigned short SyncNum);
  102. };
  103. }