using System.Collections.Concurrent; using MrWu.Debug; using Server.Core; using Server.Net; namespace Server { public class GameSessionManager : SingleInstance { private readonly ConcurrentDictionary _sessions = new ConcurrentDictionary(); /// /// 如果已经存在,则不能添加 /// /// /// /// public bool AddPlayerSession(int userid, IUserSession session) { Debug.Info($"GameSessionManager 添加玩家:{userid}"); return _sessions.TryAdd(userid, session); } /// /// 如果Session 不是同一个不能移除 /// /// /// /// public bool RemovePlayerSession(int userid, IUserSession session) { Debug.Log($"移除玩家Session:{userid}"); // 尝试获取 userid 对应的 Session if (_sessions.TryGetValue(userid, out IUserSession existingSession)) { Debug.Log($"找到玩家的Session! {existingSession.GetType()} {session.GetType()}"); // 检查获取到的 Session 是否与传入的 session 相同 if (existingSession == session) { // 如果相同,则尝试移除 Debug.Info($"GameSessionManager 移除玩家:{userid}"); return _sessions.TryRemove(userid, out _); } } // 如果 Session 不相同或 userid 不存在,则返回 false return false; } /// /// 查找Session /// /// /// public IUserSession FindSession(int userid) { // 尝试获取 userid 对应的 Session if (_sessions.TryGetValue(userid, out IUserSession session)) { // 如果找到,返回该 Session return session; } // 如果未找到,返回 null return null; } } }