修改跨天检测方法
parent
d4af337095
commit
876636fb53
|
|
@ -14,7 +14,10 @@ public class CrossDayChecker : Singlenton<CrossDayChecker>, IUpdatable, IInitabl
|
|||
|
||||
// 记录上次检查的时间
|
||||
private DateTime lastCheckTime;
|
||||
|
||||
|
||||
// 服务器时间与本地时间的差值(毫秒)
|
||||
private long serverTimeOffset;
|
||||
|
||||
private bool _init;
|
||||
public bool disableCheck = false;
|
||||
|
||||
|
|
@ -27,7 +30,9 @@ public class CrossDayChecker : Singlenton<CrossDayChecker>, IUpdatable, IInitabl
|
|||
{
|
||||
if (!_init) return;
|
||||
if (disableCheck) return;
|
||||
var now = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server);
|
||||
|
||||
// 使用本地时间加上差值计算服务器时间,避免频繁网络请求
|
||||
var now = GetEstimatedServerTime();
|
||||
|
||||
// 检测跨天
|
||||
if (HasCrossedDay(lastCheckTime, now))
|
||||
|
|
@ -55,8 +60,15 @@ public class CrossDayChecker : Singlenton<CrossDayChecker>, IUpdatable, IInitabl
|
|||
|
||||
public void InitForLoginOk()
|
||||
{
|
||||
// 从配置中获取跨天时间点
|
||||
checkPointTime = new TimeSpan(GLConfig.Inst.data.DailyChangeHour, 0, 0);
|
||||
|
||||
// 初始化时计算服务器时间与本地时间的差值
|
||||
DateTime serverTime = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server);
|
||||
DateTime localTime = DateTime.Now;
|
||||
serverTimeOffset = (long)(serverTime - localTime).TotalMilliseconds;
|
||||
DebugUtil.Log($"CrossDayChecker: 服务器时间偏移量:{serverTimeOffset}毫秒");
|
||||
|
||||
if (PlayerPrefs.HasKey("CrossDayChecker_LastCheckTime"))
|
||||
{
|
||||
string savedTime = PlayerPrefs.GetString("CrossDayChecker_LastCheckTime");
|
||||
|
|
@ -68,19 +80,27 @@ public class CrossDayChecker : Singlenton<CrossDayChecker>, IUpdatable, IInitabl
|
|||
else
|
||||
{
|
||||
DebugUtil.Log("CrossDayChecker: 无法解析存储的时间,使用当前服务器时间作为初始化时间。");
|
||||
lastCheckTime = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server);
|
||||
lastCheckTime = serverTime;
|
||||
SendAllCrossEvent();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugUtil.Log("CrossDayChecker: 本地存储中未找到上次检查时间,使用当前服务器时间作为初始化时间。");
|
||||
lastCheckTime = CommonUtils.GetCurTime(CommonUtils.E_TimeType.Server);
|
||||
lastCheckTime = serverTime;
|
||||
SendAllCrossEvent();
|
||||
}
|
||||
|
||||
_init = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据本地时间和时间偏移量估算服务器时间
|
||||
/// </summary>
|
||||
private DateTime GetEstimatedServerTime()
|
||||
{
|
||||
return DateTime.Now.AddMilliseconds(serverTimeOffset);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检测是否跨天
|
||||
|
|
|
|||
Loading…
Reference in New Issue