using Fantasy; using Fantasy.Entitas.Interface; // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract namespace Fantasy.Authentication; public sealed class AccountCacheInfoTimeOutDestroySystem : DestroySystem { protected override void Destroy(AccountCacheInfoTimeOut self) { if (self.TimerId != 0) { self.Scene.TimerComponent.Net.Remove(ref self.TimerId); } self.Key = null; } } public static class AccountCacheInfoTimeOutSystem { public static void TimeOut(this AccountCacheInfoTimeOut self, string key, int timeout) { self.Key = key; // 创建一个任务计时器、用在timeout时间后执行,并且要清楚掉当前鉴权服务器缓存 var scene = self.Scene; var runTimeId = self.RuntimeId; self.TimerId = scene.TimerComponent.Net.OnceTimer(timeout, () => { if (runTimeId != self.RuntimeId) { return; } self.TimerId = 0; AuthenticationHelper.RemoveLoginAccounts(scene, self.Key,true); }); } }