SendPacket
SendPacket
함수 개요
지정한 패킷을 송신 큐에 추가합니다. 실제 전송은 Update() 호출 시 비동기로 처리됩니다. 스레드 세이프(thread-safe)하게 설계되어 있어 게임 로직 스레드에서 자유롭게 호출 가능합니다.
시그니처
cpp
bool CNetworkManager::SendPacket(const CPacket& packet);
파라미터
| 파라미터 | 타입 | 설명 |
|---|---|---|
packet |
const CPacket& |
송신할 패킷 객체 |
반환값
true- 송신 큐에 성공적으로 추가됨false- 미연결 상태이거나 큐가 가득 참
동작 설명
- 연결 상태(
EConnectionState::Connected)를 확인합니다. - 뮤텍스를 획득하여 송신 큐에 패킷을 추가합니다.
- 큐 크기가 임계값을 초과하면 경고 로그를 출력합니다.
구현 예시
cpp
bool CNetworkManager::SendPacket(const CPacket& packet)
{
if (m_eState != EConnectionState::Connected)
{
LOG_WARN("SendPacket called while not connected");
return false;
}
std::lock_guard<std::mutex> lock(m_SendMutex);
if (m_SendQueue.IsFull())
{
LOG_ERROR("Send queue is full, packet dropped (ID: %d)", packet.GetID());
return false;
}
m_SendQueue.Push(packet);
return true;
}
주의사항
- 연결이 끊긴 상태에서 호출하면
false를 반환하므로, 반환값을 반드시 확인하세요. - 패킷 크기는
MAX_PACKET_SIZE(기본값: 65535 바이트)를 초과할 수 없습니다. - 대량 패킷을 짧은 시간에 전송할 경우 큐 오버플로우에 주의하세요.