1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #pragma once
- namespace HostServer{
- class SyncTime
- {
- public:
- SyncTime(){}
- SyncTime(unsigned long long upperIdCode, long long receiveTime,bool isRTimeOverflow, long long sendTime, bool isSTimeOverflow, unsigned short syncLevel)
- :_upperIdCode(upperIdCode),
- _receiveTime(receiveTime), _sendTime(sendTime),
- _syncLevel(syncLevel),
- _timeDelay(0),
- _isRTimeOverflow(isRTimeOverflow), _isSTimeOverflow(isSTimeOverflow)
- {}
- SyncTime(SyncTimeMsg &msg, SyncTimeMsg &upperMsg, SyncTime* s = NULL)
- :_upperIdCode(msg.UpperIdCode()),
- _receiveTime(msg.LocalStationReceiveTime()), _sendTime(upperMsg.LocalStationSendTime()),
- _syncLevel(msg.SyncLevel()),
- _timeDelay(0)
- {
- // 根据历史记录解决时间戳溢出的问题
- if(s == NULL)
- {
- _isRTimeOverflow = false;
- _isSTimeOverflow = false;
- }
- else
- {
- _isRTimeOverflow = (_receiveTime < s->RealReceiveTime()) ? !s->IsRTimeOverflow() : s->IsRTimeOverflow();
- _isSTimeOverflow = (_sendTime < s->RealSendTime()) ? !s->IsSTimeOverflow() : s->IsSTimeOverflow();
- // 解决同时溢出的问题
- if(_isRTimeOverflow && _isSTimeOverflow)
- {
- _isRTimeOverflow = false;
- _isSTimeOverflow = false;
- }
- }
- }
- unsigned long long UpperIdCode() const { return _upperIdCode; }
- unsigned long long ReceiveTime() const
- {
- return _receiveTime + (_isRTimeOverflow ? TIME_MAX : 0);
- }
- unsigned long long RealReceiveTime() const { return _receiveTime; }
- void ReceiveTime(unsigned long long val) { _receiveTime = val; }
- bool IsRTimeOverflow() const { return _isRTimeOverflow; }
- void IsRTimeOverflow(bool val) { _isRTimeOverflow = val; }
- unsigned long long SendTime() const
- {
- return _sendTime + (_isSTimeOverflow ? TIME_MAX : 0);
- }
- unsigned long long RealSendTime() const { return _sendTime; }
- void SendTime(unsigned long long val) { _sendTime = val; }
- bool IsSTimeOverflow() const { return _isSTimeOverflow; }
- void IsSTimeOverflow(bool val) { _isSTimeOverflow = val; }
- unsigned short SyncLevel() const { return _syncLevel; }
- void SyncLevel(unsigned short val) { _syncLevel = val; }
- long long TimeDelay() const { return _timeDelay; }
- void TimeDelay(long long val) { _timeDelay = val; }
- private:
- unsigned long long _upperIdCode;
- unsigned long long _receiveTime; // 接收时间
- bool _isRTimeOverflow; // 接收时间是否溢出(过周期)
- unsigned long long _sendTime; // 发送时间
- bool _isSTimeOverflow; // 发送时间是否溢出(过周期)
- unsigned short _syncLevel; // 分站时间同步层级
- long long _timeDelay; //
- };
- }
|