feat : 서버 로직 성능개선 / 결과 정리

This commit is contained in:
qornwh1
2026-03-06 10:16:36 +09:00
parent 85c3276207
commit 2a7d4aeb09
5 changed files with 159 additions and 35 deletions

View File

@@ -1,3 +1,4 @@
using LiteNetLib;
using MMOserver.Game.Channel.Maps;
namespace MMOserver.Game.Channel;
@@ -10,6 +11,9 @@ public class Channel
// 채널 내 유저 상태 (hashKey → Player)
private Dictionary<long, Player> connectUsers = new Dictionary<long, Player>();
// 채널 내 유저 NetPeer (hashKey → NetPeer) — BroadcastToChannel 교차 조회 제거용
private Dictionary<long, NetPeer> connectPeers = new Dictionary<long, NetPeer>();
public int ChannelId
{
get;
@@ -33,19 +37,27 @@ public class Channel
ChannelId = channelId;
}
public void AddUser(long userId, Player player)
public void AddUser(long userId, Player player, NetPeer peer)
{
connectUsers[userId] = player;
connectPeers[userId] = peer;
UserCount++;
}
public void RemoveUser(long userId)
{
connectUsers.Remove(userId);
connectPeers.Remove(userId);
UserCount--;
}
// 채널 내 모든 유저의 hashKey 반환
// 재연결(WiFi→LTE 등) 시 동일 유저의 peer 교체
public void UpdatePeer(long userId, NetPeer peer)
{
connectPeers[userId] = peer;
}
// 채널 내 모든 유저의 hashKey 반환 (채널 입장 시 기존 플레이어 목록 조회용)
public IEnumerable<long> GetConnectUsers()
{
return connectUsers.Keys;
@@ -57,6 +69,12 @@ public class Channel
return connectUsers.Values;
}
// 채널 내 모든 NetPeer 반환 — BroadcastToChannel 전용 (sessions 교차 조회 불필요)
public IEnumerable<NetPeer> GetConnectPeers()
{
return connectPeers.Values;
}
// 특정 유저의 Player 반환
public Player? GetPlayer(long userId)
{

View File

@@ -1,4 +1,6 @@
namespace MMOserver.Game.Channel;
using LiteNetLib;
namespace MMOserver.Game.Channel;
public class ChannelManager
{
@@ -37,12 +39,12 @@ public class ChannelManager
return channels;
}
public void AddUser(int channelId, long userId, Player player)
public void AddUser(int channelId, long userId, Player player, NetPeer peer)
{
// 유저 추가
connectUsers.Add(userId, channelId);
// 채널에 유저 추가
channels[channelId].AddUser(userId, player);
// 채널에 유저 + peer 추가
channels[channelId].AddUser(userId, player, peer);
}
public bool RemoveUser(long userId)