SyncTime.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. namespace HostServer{
  3. class SyncTime
  4. {
  5. public:
  6. SyncTime(){}
  7. SyncTime(unsigned long long upperIdCode, long long receiveTime,bool isRTimeOverflow, long long sendTime, bool isSTimeOverflow, unsigned short syncLevel)
  8. :_upperIdCode(upperIdCode),
  9. _receiveTime(receiveTime), _sendTime(sendTime),
  10. _syncLevel(syncLevel),
  11. _timeDelay(0),
  12. _isRTimeOverflow(isRTimeOverflow), _isSTimeOverflow(isSTimeOverflow)
  13. {}
  14. SyncTime(SyncTimeMsg &msg, SyncTimeMsg &upperMsg, SyncTime* s = NULL)
  15. :_upperIdCode(msg.UpperIdCode()),
  16. _receiveTime(msg.LocalStationReceiveTime()), _sendTime(upperMsg.LocalStationSendTime()),
  17. _syncLevel(msg.SyncLevel()),
  18. _timeDelay(0)
  19. {
  20. // 根据历史记录解决时间戳溢出的问题
  21. if(s == NULL)
  22. {
  23. _isRTimeOverflow = false;
  24. _isSTimeOverflow = false;
  25. }
  26. else
  27. {
  28. _isRTimeOverflow = (_receiveTime < s->RealReceiveTime()) ? !s->IsRTimeOverflow() : s->IsRTimeOverflow();
  29. _isSTimeOverflow = (_sendTime < s->RealSendTime()) ? !s->IsSTimeOverflow() : s->IsSTimeOverflow();
  30. // 解决同时溢出的问题
  31. if(_isRTimeOverflow && _isSTimeOverflow)
  32. {
  33. _isRTimeOverflow = false;
  34. _isSTimeOverflow = false;
  35. }
  36. }
  37. }
  38. unsigned long long UpperIdCode() const { return _upperIdCode; }
  39. unsigned long long ReceiveTime() const
  40. {
  41. return _receiveTime + (_isRTimeOverflow ? TIME_MAX : 0);
  42. }
  43. unsigned long long RealReceiveTime() const { return _receiveTime; }
  44. void ReceiveTime(unsigned long long val) { _receiveTime = val; }
  45. bool IsRTimeOverflow() const { return _isRTimeOverflow; }
  46. void IsRTimeOverflow(bool val) { _isRTimeOverflow = val; }
  47. unsigned long long SendTime() const
  48. {
  49. return _sendTime + (_isSTimeOverflow ? TIME_MAX : 0);
  50. }
  51. unsigned long long RealSendTime() const { return _sendTime; }
  52. void SendTime(unsigned long long val) { _sendTime = val; }
  53. bool IsSTimeOverflow() const { return _isSTimeOverflow; }
  54. void IsSTimeOverflow(bool val) { _isSTimeOverflow = val; }
  55. unsigned short SyncLevel() const { return _syncLevel; }
  56. void SyncLevel(unsigned short val) { _syncLevel = val; }
  57. long long TimeDelay() const { return _timeDelay; }
  58. void TimeDelay(long long val) { _timeDelay = val; }
  59. private:
  60. unsigned long long _upperIdCode;
  61. unsigned long long _receiveTime; // 接收时间
  62. bool _isRTimeOverflow; // 接收时间是否溢出(过周期)
  63. unsigned long long _sendTime; // 发送时间
  64. bool _isSTimeOverflow; // 发送时间是否溢出(过周期)
  65. unsigned short _syncLevel; // 分站时间同步层级
  66. long long _timeDelay; //
  67. };
  68. }