111 lines
2.4 KiB
C#
111 lines
2.4 KiB
C#
using LiteNetLib;
|
|
using MMOserver.Game.Channel.Maps;
|
|
using MMOserver.Game.Party;
|
|
|
|
namespace MMOserver.Game.Channel;
|
|
|
|
public class Channel
|
|
{
|
|
// 로비
|
|
private Robby robby = new Robby();
|
|
|
|
// 파티
|
|
private PartyManager partyManager = new PartyManager();
|
|
|
|
// 채널 내 유저 상태 (hashKey → Player)
|
|
private Dictionary<int, Player> connectUsers = new Dictionary<int, Player>();
|
|
|
|
// 채널 내 유저 NetPeer (hashKey → NetPeer) — BroadcastToChannel 교차 조회 제거용
|
|
private Dictionary<int, NetPeer> connectPeers = new Dictionary<int, NetPeer>();
|
|
|
|
public int ChannelId
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public int UserCount
|
|
{
|
|
get;
|
|
private set;
|
|
}
|
|
|
|
public int UserCountMax
|
|
{
|
|
get;
|
|
private set;
|
|
} = 100;
|
|
|
|
public Channel(int channelId)
|
|
{
|
|
ChannelId = channelId;
|
|
}
|
|
|
|
public void AddUser(int userId, Player player, NetPeer peer)
|
|
{
|
|
connectUsers[userId] = player;
|
|
connectPeers[userId] = peer;
|
|
UserCount++;
|
|
}
|
|
|
|
public void RemoveUser(int userId)
|
|
{
|
|
connectUsers.Remove(userId);
|
|
connectPeers.Remove(userId);
|
|
UserCount--;
|
|
}
|
|
|
|
// 재연결(WiFi→LTE 등) 시 동일 유저의 peer 교체
|
|
public void UpdatePeer(int userId, NetPeer peer)
|
|
{
|
|
connectPeers[userId] = peer;
|
|
}
|
|
|
|
// 채널 내 모든 유저의 hashKey 반환 (채널 입장 시 기존 플레이어 목록 조회용)
|
|
public IEnumerable<int> GetConnectUsers()
|
|
{
|
|
return connectUsers.Keys;
|
|
}
|
|
|
|
// 채널 내 모든 Player 반환
|
|
public IEnumerable<Player> GetPlayers()
|
|
{
|
|
return connectUsers.Values;
|
|
}
|
|
|
|
// 채널 내 모든 NetPeer 반환 — BroadcastToChannel 전용 (sessions 교차 조회 불필요)
|
|
public IEnumerable<NetPeer> GetConnectPeers()
|
|
{
|
|
return connectPeers.Values;
|
|
}
|
|
|
|
// 특정 유저의 Player 반환
|
|
public Player? GetPlayer(int userId)
|
|
{
|
|
connectUsers.TryGetValue(userId, out Player? player);
|
|
return player;
|
|
}
|
|
|
|
public int HasUser(int userId)
|
|
{
|
|
if (connectUsers.ContainsKey(userId))
|
|
{
|
|
return ChannelId;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
// 로비 가져옴
|
|
public Robby GetRobby()
|
|
{
|
|
return robby;
|
|
}
|
|
|
|
// 파티매니저 가져옴
|
|
public PartyManager GetPartyManager()
|
|
{
|
|
return partyManager;
|
|
}
|
|
}
|