SyncManager.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. bool isOutputLog;
  28. string logDir;
  29. public:
  30. SyncManager();
  31. ~SyncManager();
  32. //************************************
  33. // Description: 用于初始化所有成员
  34. // Method: init
  35. // Returns: void
  36. //************************************
  37. void init();
  38. //************************************
  39. // Description: 用于解析时间同步msg中的内容
  40. // Method: analyzeMsg
  41. // Returns: void
  42. // Parameter: SyncTimeMsg & msg 从socket获取的消息
  43. //************************************
  44. void analyzeSyncMsg(SyncTimeMsg &msg);
  45. //************************************
  46. // Description: 更新距离信息
  47. // Method: updateDistance
  48. // Returns: void
  49. // Parameter: unsigned int localId 当前分站号
  50. // Parameter: unsigned char localAntNum 当前分站的天线号
  51. // Parameter: unsigned int upperId 上级分站号
  52. // Parameter: unsigned char uppderAntNum 上级分站的天线号
  53. // Parameter: int d 距离
  54. //************************************
  55. void updateDistance(unsigned int localId, unsigned char localAntNum, unsigned int upperId, unsigned char uppderAntNum, double d);
  56. //************************************
  57. // Description: 更新anchor信息
  58. // Method: updateAnchor
  59. // Returns: void
  60. // Parameter: unsigned int localId 当前分站号
  61. // Parameter: unsigned char localAntNum 当前分站的天线号
  62. // Parameter: int x
  63. // Parameter: int y
  64. // Parameter: int z
  65. //************************************
  66. void updateAnchor(unsigned int localId, unsigned char localAntNum, double x, double y, double z);
  67. //************************************
  68. // Description: 删除anchor
  69. // Method: deleteAnchor
  70. // Returns: void
  71. // Parameter: unsigned int localId 当前分站号
  72. // Parameter: unsigned char localAntNum 当前分站的天线号
  73. //************************************
  74. void deleteAnchor(unsigned int localId, unsigned char localAntNum);
  75. // unsigned long long代表anchor编码 ID+AntNum
  76. unordered_map<unsigned long long, Position> _anchors;
  77. // unsigned long long 代表anchor编码 ID+AntNum
  78. unordered_map<unsigned long long,unordered_map<unsigned long long, double>> _distance;
  79. // with root
  80. // 使用_syncTimeMsgs[SyncNum][LocalIdCode]访问对应的SyncTimeMsg,即同步时间消息
  81. unordered_map<unsigned long long, deque<SyncTimeMsgItem>> _syncTimeMsgs;
  82. // 使用_historySync[SyncNum][LocalIdCode]访问对应的SyncTime,即计算后的时间同步
  83. unordered_map<unsigned long long, deque<SyncTimeItem>> _historySync;
  84. //************************************
  85. // Description: 根据Tag的记录和历史msg,利用线性插值算法计算Tag的预估时间
  86. // Method: calTimeByLinar
  87. // Returns: unsigned long long
  88. // Parameter: unsigned long long tagReceiveTime tag的接收时间
  89. // Parameter: unsigned short SyncNum 接收tag时的时间同步编号
  90. // Parameter: unsigned long long localIdCode 接收tag的anchorID编码
  91. //************************************
  92. unsigned long long calTimeByLinar(TagMsg &tag);
  93. //************************************
  94. // Method: updateSync
  95. // Returns: bool
  96. // Parameter: unsigned long long rootIdCode
  97. // Parameter: unsigned short SyncNum
  98. // Parameter: unsigned long long localIdCode
  99. //************************************
  100. bool updateSync(unsigned long long rootIdCode, int idx, unsigned short SyncNum, unsigned long long localIdCode);
  101. int FindSyncTimeMsg(unsigned long long rootIdCode, unsigned short SyncNum);
  102. int FindHisSyncTime(unsigned long long rootIdCode, unsigned short SyncNum);
  103. void SetOutputLog(bool log){ this->isOutputLog = log;}
  104. bool IsOutputLog() const {return isOutputLog;}
  105. };
  106. };