using Fantasy; using Fantasy.Async; using NB.Game; namespace NB.Chat; public static class ChatUnitManageComponentSystem { #region 上线下线 /// /// 玩家上线 /// /// /// /// /// public static async FTask Online(this ChatUnitManageComponent self, Scene scene, RoleSimpleInfo roleSimpleInfo, long gateRouteId) { var accountId = roleSimpleInfo.RoleId; if (!self.TryGet(accountId, out var account)) { account = ChatUnitFactory.Create(scene, accountId); self.Add(account); } if (account != null) { account.GateRouteId = gateRouteId; account.RoleId = accountId; account.Head = roleSimpleInfo.Head; account.Level = roleSimpleInfo.Level; account.NickName = roleSimpleInfo.NickName; account.Country = roleSimpleInfo.Country; } await FTask.CompletedTask; return account; } public static async FTask Offline(this ChatUnitManageComponent self, Scene scene, long accountId) { self.Remove(accountId); await FTask.CompletedTask; } #endregion #region 获取&移除 public static void Add(this ChatUnitManageComponent self, ChatUnit account) { self.ChatUnits.Add(account.Id, account); } public static ChatUnit? Get(this ChatUnitManageComponent self, long accountId) { return self.ChatUnits.GetValueOrDefault(accountId); } public static bool TryGet(this ChatUnitManageComponent self, long accountId, out ChatUnit? account) { return self.ChatUnits.TryGetValue(accountId, out account); } public static void Remove(this ChatUnitManageComponent self, long accountId, bool isDispose = true) { if (!self.ChatUnits.Remove(accountId, out var account)) { return; } if (!isDispose) { return; } account.Dispose(); } #endregion }