96 lines
2.2 KiB
C#
96 lines
2.2 KiB
C#
using LiteNetLib;
|
|
using MMOserver.Utils;
|
|
|
|
namespace MMOserver.Game.Channel;
|
|
|
|
public class ChannelManager : Singleton<ChannelManager>
|
|
{
|
|
// 채널 관리
|
|
private Dictionary<int, Channel> channels = new Dictionary<int, Channel>();
|
|
|
|
// 보스 레이드 채널
|
|
private readonly int bossChannelStart = 10000;
|
|
private readonly int bossChannelSize = 10;
|
|
|
|
// 채널별 유저 관리 (유저 key, 채널 val)
|
|
private Dictionary<int, int> connectUsers = new Dictionary<int, int>();
|
|
|
|
public ChannelManager()
|
|
{
|
|
Initializer();
|
|
}
|
|
|
|
public void Initializer(int channelSize = 1)
|
|
{
|
|
for (int i = 1; i <= channelSize; i++)
|
|
{
|
|
channels.Add(i, new Channel(i));
|
|
}
|
|
|
|
// 보스 채널 생성
|
|
for (int i = 1; i <= bossChannelSize; i++)
|
|
{
|
|
int bossChannel = i + bossChannelStart;
|
|
channels.Add(bossChannel, new Channel(bossChannel));
|
|
}
|
|
}
|
|
|
|
public Channel GetChannel(int channelId)
|
|
{
|
|
return channels[channelId];
|
|
}
|
|
|
|
public Dictionary<int, Channel> 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<int, int> GetConnectUsers()
|
|
{
|
|
return connectUsers;
|
|
}
|
|
}
|