SendPacket

함수 개요

지정한 패킷을 송신 큐에 추가합니다. 실제 전송은 Update() 호출 시 비동기로 처리됩니다. 스레드 세이프(thread-safe)하게 설계되어 있어 게임 로직 스레드에서 자유롭게 호출 가능합니다.

시그니처

cpp
bool CNetworkManager::SendPacket(const CPacket& packet);

파라미터

파라미터 타입 설명
packet const CPacket& 송신할 패킷 객체

반환값

  • true - 송신 큐에 성공적으로 추가됨
  • false - 미연결 상태이거나 큐가 가득 참

동작 설명

  1. 연결 상태(EConnectionState::Connected)를 확인합니다.
  2. 뮤텍스를 획득하여 송신 큐에 패킷을 추가합니다.
  3. 큐 크기가 임계값을 초과하면 경고 로그를 출력합니다.

구현 예시

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 바이트)를 초과할 수 없습니다.
  • 대량 패킷을 짧은 시간에 전송할 경우 큐 오버플로우에 주의하세요.