namespace KYFramework; [ObjectSystem] public class TimerAwakeSystem: AwakeSystem { public override void Awake(Timer self) { self.dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); self.dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); self.FrameTime = self.ClientNow(); } } [ObjectSystem] public class TimerUpdateSystem : UpdateSystem { public override void Update(Timer self) { self.FrameTime = self.ClientNow(); } } public static class TimerSystem { /// /// 根据时间戳获取时间 /// public static DateTime ToDateTime(this Timer self,long timeStamp) { return self.dt.AddTicks(timeStamp * 10000); } // 线程安全 public static long ClientNow(this Timer self) { return (DateTime.UtcNow.Ticks - self.dt1970.Ticks) / 10000; } public static long ServerNow(this Timer self) { return self.ClientNow() + self.ServerMinusClientTime; } public static long ClientFrameTime(this Timer self) { return self.FrameTime; } public static long ServerFrameTime(this Timer self) { return self.FrameTime + self.ServerMinusClientTime; } public static long Transition(this Timer self,DateTime d) { return (d.Ticks - self.dt.Ticks) / 10000; } }