using Fantasy; using Fantasy.Entitas.Interface; namespace Fantasy.Authentication; public sealed class AccountTimeOutDestroySystem : DestroySystem { protected override void Destroy(AccountTimeOut self) { if (self.TimerId != 0) { self.Scene.TimerComponent.Net.Remove(ref self.TimerId); } } } public static class AccountTimeOutSystem { public static void TimeOut(this AccountTimeOut self, int timeout) { // 创建一个任务计时器、用在timeout时间后执行,并且要清楚掉当前鉴权服务器缓存 var scene = self.Scene; var account = (Account)self.Parent; var accountRunTimeId = account.RuntimeId; self.TimerId = scene.TimerComponent.Net.OnceTimer(timeout, () => { if (accountRunTimeId != account.RuntimeId) { return; } self.TimerId = 0; AuthenticationHelper.RemoveCache(scene, account.Username,true); }); } }