using LiteNetLib; using MMOserver.Config; using MMOserver.Utils; namespace MMOserver.Game.Channel; public class ChannelManager : Singleton { // 채널 관리 private Dictionary channels = new Dictionary(); // 채널별 유저 관리 (유저 key, 채널 val) private Dictionary connectUsers = new Dictionary(); public ChannelManager() { Initializer(AppConfig.Server.ChannelCount); } public void Initializer(int channelSize = 1) { for (int i = 1; i <= channelSize; i++) { channels.Add(i, new Channel(i)); } } public Channel GetChannel(int channelId) { return channels[channelId]; } public Dictionary GetChannels() { return channels; } public void AddUser(int channelId, int userId, Player player, NetPeer peer) { // 유저 추가 (채널 이동 시 기존 매핑 덮어쓰기 허용) connectUsers[userId] = channelId; // 채널에 유저 + peer 추가 channels[channelId].AddUser(userId, player, peer); } public bool RemoveUser(int userId) { // 채널에 없는 유저면 스킵 if (!connectUsers.TryGetValue(userId, out int channelId)) { return false; } // 날린다. if (channelId >= 0) { channels[channelId].RemoveUser(userId); connectUsers.Remove(userId); return true; } return false; } public int HasUser(int userId) { int channelId = -1; if (connectUsers.ContainsKey(userId)) { channelId = connectUsers[userId]; } if (channelId != -1) { return channels[channelId].HasUser(userId); } return channelId; } public Dictionary GetConnectUsers() { return connectUsers; } }