feat : GameServer 패킷 메시지 단위 분할 / 플레이어 정보 변환 기능 변경
This commit is contained in:
40
MMOTestServer/MMOserver/Game/Service/ExitChannelHandler.cs
Normal file
40
MMOTestServer/MMOserver/Game/Service/ExitChannelHandler.cs
Normal file
@@ -0,0 +1,40 @@
|
||||
using LiteNetLib;
|
||||
using MMOserver.Game.Channel;
|
||||
using MMOserver.Packet;
|
||||
using ProtoBuf;
|
||||
using Serilog;
|
||||
using ServerLib.Service;
|
||||
|
||||
namespace MMOserver.Game.Service;
|
||||
|
||||
/*
|
||||
* 채널 나가는 메시지 핸들러
|
||||
*/
|
||||
public partial class GameServer : ServerBase
|
||||
{
|
||||
private void OnExitChannel(NetPeer peer, int hashKey, byte[] payload)
|
||||
{
|
||||
ExitChannelPacket packet = Serializer.Deserialize<ExitChannelPacket>(new ReadOnlyMemory<byte>(payload));
|
||||
|
||||
ChannelManager cm = ChannelManager.Instance;
|
||||
|
||||
// 제거 전에 채널/플레이어 정보 저장 (브로드캐스트에 필요)
|
||||
int channelId = cm.HasUser(hashKey);
|
||||
Player? player = channelId >= 0 ? cm.GetChannel(channelId).GetPlayer(hashKey) : null;
|
||||
|
||||
// 파티 자동 탈퇴
|
||||
if (channelId >= 0)
|
||||
{
|
||||
HandlePartyLeaveOnExit(channelId, hashKey);
|
||||
}
|
||||
|
||||
cm.RemoveUser(hashKey);
|
||||
Log.Debug("[GameServer] EXIT_CHANNEL HashKey={Key} PlayerId={PlayerId}", hashKey, packet.PlayerId);
|
||||
|
||||
// 같은 채널 유저들에게 나갔다고 알림
|
||||
if (channelId >= 0 && player != null)
|
||||
{
|
||||
SendExitChannelPacket(peer, hashKey, channelId, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user