public StandardLocalSystemClockCore(SteadyClockCore steadyClockCore)
        {
            _steadyClockCore = steadyClockCore;
            _context         = new SystemClockContext();

            _context.SteadyTimePoint.ClockSourceId = steadyClockCore.GetClockSourceId();
        }
        public StandardNetworkSystemClockCore(SteadyClockCore steadyClockCore)
        {
            _steadyClockCore = steadyClockCore;
            _context         = new SystemClockContext();

            _context.SteadyTimePoint.ClockSourceId  = steadyClockCore.GetClockSourceId();
            _standardNetworkClockSufficientAccuracy = new TimeSpanType(0);
        }
예제 #3
0
        public SystemClockCore(SteadyClockCore steadyClockCore)
        {
            _steadyClockCore = steadyClockCore;
            _context         = new SystemClockContext();
            _isInitialized   = false;

            _context.SteadyTimePoint.ClockSourceId = steadyClockCore.GetClockSourceId();
            _systemClockContextUpdateCallback      = null;
        }
예제 #4
0
        private bool NeedUpdate(SystemClockContext context)
        {
            if (_hasContext)
            {
                return(_context.Offset != context.Offset || _context.SteadyTimePoint.ClockSourceId != context.SteadyTimePoint.ClockSourceId);
            }

            return(true);
        }
예제 #5
0
        protected virtual ResultCode Flush(SystemClockContext context)
        {
            if (_systemClockContextUpdateCallback == null)
            {
                return(ResultCode.Success);
            }

            return(_systemClockContextUpdateCallback.Update(context));
        }
예제 #6
0
        public ResultCode SetSystemClockContext(SystemClockContext context)
        {
            ResultCode result = SetClockContext(context);

            if (result == ResultCode.Success)
            {
                result = Flush(context);
            }

            return(result);
        }
        public override ResultCode GetClockContext(ITickSource tickSource, out SystemClockContext context)
        {
            ResultCode result = ApplyAutomaticCorrection(tickSource, false);

            context = new SystemClockContext();

            if (result == ResultCode.Success)
            {
                return(_localSystemClockCore.GetClockContext(tickSource, out context));
            }

            return(result);
        }
예제 #8
0
        public ResultCode SetCurrentTime(ITickSource tickSource, long posixTime)
        {
            SteadyClockTimePoint currentTimePoint = _steadyClockCore.GetCurrentTimePoint(tickSource);

            SystemClockContext clockContext = new SystemClockContext()
            {
                Offset          = posixTime - currentTimePoint.TimePoint,
                SteadyTimePoint = currentTimePoint
            };

            ResultCode result = SetClockContext(clockContext);

            if (result == ResultCode.Success)
            {
                result = Flush(clockContext);
            }

            return(result);
        }
예제 #9
0
        public ResultCode Update(SystemClockContext context)
        {
            ResultCode result = ResultCode.Success;

            if (NeedUpdate(context))
            {
                _context    = context;
                _hasContext = true;

                result = Update();

                if (result == ResultCode.Success)
                {
                    BroadcastOperationEvent();
                }
            }

            return(result);
        }
예제 #10
0
 public abstract ResultCode GetSystemClockContext(KThread thread, out SystemClockContext context);
예제 #11
0
 public SystemClockContextUpdateCallback()
 {
     _operationEventList = new List <KWritableEvent>();
     _context            = new SystemClockContext();
     _hasContext         = false;
 }
예제 #12
0
 public abstract ResultCode SetSystemClockContext(SystemClockContext context);
예제 #13
0
 public abstract ResultCode Flush(SystemClockContext context);
        public override ResultCode Flush(SystemClockContext context)
        {
            // TODO: set:sys SetNetworkSystemClockContext

            return(ResultCode.Success);
        }
예제 #15
0
        public static ResultCode GetCurrentTime(out long currentTime, SteadyClockTimePoint steadyClockTimePoint, SystemClockContext context)
        {
            currentTime = 0;

            if (steadyClockTimePoint.ClockSourceId == context.SteadyTimePoint.ClockSourceId)
            {
                currentTime = steadyClockTimePoint.TimePoint + context.Offset;

                return(ResultCode.Success);
            }

            return(ResultCode.TimeMismatch);
        }
 public override ResultCode SetClockContext(SystemClockContext context)
 {
     return(ResultCode.NotImplemented);
 }
        public override ResultCode GetSystemClockContext(KThread thread, out SystemClockContext context)
        {
            context = _context;

            return(ResultCode.Success);
        }
        public override ResultCode SetSystemClockContext(SystemClockContext context)
        {
            _context = context;

            return(ResultCode.Success);
        }
예제 #19
0
        public virtual ResultCode GetClockContext(ITickSource tickSource, out SystemClockContext context)
        {
            context = _context;

            return(ResultCode.Success);
        }
예제 #20
0
        public virtual ResultCode SetClockContext(SystemClockContext context)
        {
            _context = context;

            return(ResultCode.Success);
        }
 protected override ResultCode Flush(SystemClockContext context)
 {
     // As UserSystemClock isn't a real system clock, this shouldn't happens.
     throw new NotImplementedException();
 }
예제 #22
0
        public virtual ResultCode GetClockContext(KThread thread, out SystemClockContext context)
        {
            context = _context;

            return(ResultCode.Success);
        }