public void RegistPacketHandler(Dictionary<int, Action<ServerPacketData>> packetHandlerMap)
{
packetHandlerMap.Add((int)PACKETID.NTF_IN_CONNECT_CLIENT, NotifyInConnectClient);
packetHandlerMap.Add((int)PACKETID.NTF_IN_DISCONNECT_CLIENT, NotifyInDisConnectClient);
packetHandlerMap.Add((int)PACKETID.REQ_LOGIN, RequestLogin);
}
public void NotifyInConnectClient(ServerPacketData requestData)
{
MainServer.MainLogger.Debug($"Current Connected Session Count: {ServerNetwork.SessionCount}");
}
public void NotifyInDisConnectClient(ServerPacketData requestData)
{
// 세션 아이디와 해당 유저 가져오기
var sessionID = requestData.SessionID;
var user = UserMgr.GetUser(sessionID);
if (user != null)
{
// 해당 유저의 방 번호 가져오기
var roomNum = user.RoomNumber;
// 방 번호가 유효하면
if (roomNum != PacketDef.INVALID_ROOM_NUMBER)
{
// 방을 떠난걸 알려주기 위한 패킷 생성
var packet = new PKTInternalNtfRoomLeave()
{
RoomNumber = roomNum,
UserID = user.ID(),
};
// 직렬화해서 패킷이 바이너리 데이터로?
var packetBodyData = MessagePackSerializer.Serialize(packet);
var internalPacket = new ServerPacketData();
internalPacket.Assign(sessionID, (Int16)PACKETID.NTF_IN_ROOM_LEAVE, packetBodyData);
// 서버에서 수신된 패킷을 처리하고 클라이언트에게 전파?
ServerNetwork.Distribute(internalPacket);
}
UserMgr.RemoveUser(sessionID);
}
MainServer.MainLogger.Debug($"Current Connected Session Count: {ServerNetwork.SessionCount}");
}
<aside> 🐿️ 패킷 아이디를 헤더에서 확인하고 Internal 패킷이면 내가 나에게 보낸 패킷이고 또는 패킷 아이디 목록에서 클라이언트가 서버에 보낸 패킷이면 처리하고 둘 다 아니면 이상한 외부에서 온 패킷이므로 Drop 처리하는 코드 넣기
</aside>