SyncManager.h 4.4 KB

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