클라이언트 종료 시 Rmi Stub/Proxy Still in use 오류가 발생합니다.

언리얼4로 클라이언트를 구현하고 있습니다.
간단하게 접속이랑 멍텅구리 프록시/스텁 붙이는거까지만 했는데 오류가 있어 문의 드립니다.
GameInstance에 작성하였구요. 실행 → 서버 접속 성공 까지는 잘 뜨는데

클라이언트 종료 시
Rmi Stub/Proxy Still in use by ProudNet Core cannot be destroyed! Destroy CNetClient or CNetServer First ! 라는 오류가 뜹니다

혹시 netClient를 파괴해주는 코드가 따로 있나요? 오류 말고도 혹시 아래 코드에 관해 조언이 가능하시다면 부탁 드리겠습니다.

아래는 GameInstance.h입니다.

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#define WIN32_LEAN_AND_MEAN
#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "Windows.h"
#include "ProudNetClient.h"
#include "CTSHeader_proxy.h"
#include "STCHeader_stub.h"
#include "TestGameInstance.generated.h"
/**
 *
 */
UCLASS()
class PARKSOLBIN_API UTestGameInstance : public UGameInstance
{
 GENERATED_BODY()
public:
 virtual void Init() override;
 virtual void Shutdown() override;
 TSharedPtr<Proud::CNetClient> netClient;
 FTimerHandle netClientLoopHandle;
 UFUNCTION()
  void netClientLoop();
 CTSHeader::Proxy ctsProxy;
 STCHeader::Stub stcStub;
};



아래는 GameInstance.cpp입니다.

// Fill out your copyright notice in the Description page of Project Settings.

#include "TestGameInstance.h"
#include "Engine/Engine.h"
#include "TimerManager.h"
#include "CTSHeader_common.cpp"
#include "CTSHeader_proxy.cpp"
#include "STCHeader_common.cpp"
#include "STCHeader_stub.cpp"
using namespace Proud;
void UTestGameInstance::Init()
{
 Super::Init();
 netClient = TSharedPtr<CNetClient>(CNetClient::Create());
 GetWorld()->GetTimerManager().SetTimer(netClientLoopHandle, this, &UTestGameInstance::netClientLoop, 0.1f, true);
 CNetConnectionParam m_param;
 m_param.m_serverIP = _PNT("127.0.0.1");
 m_param.m_serverPort = 44444;
 m_param.m_protocolVersion = Guid({ 0x5dca93f4, 0x8133, 0x44a0, { 0xb5, 0x7b, 0x75, 0x7d, 0x9c, 0x78, 0xd5, 0x2e} });
 netClient->AttachProxy(&ctsProxy);
 netClient->AttachStub(&stcStub);
 netClient->OnJoinServerComplete = [&](ErrorInfo *info, const ByteArray &replyFromServer)
 {
  if (info->m_errorType == ErrorType::ErrorType_Ok)
  {
   GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("접속 성공"));
  }
  else
  {
   GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("접속 실패"));
  }
 };
 if (netClient->Connect(m_param) == true)
 {
  GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Green, TEXT("접속 시도 성공"));
 }
 else
 {
  GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("접속 시도 실패"));
 }
}
void UTestGameInstance::netClientLoop()
{
 netClient->FrameMove();
}
void UTestGameInstance::Shutdown()
{
 Super::Shutdown();
// netClient->Disconnect(); 를 써봤는데 똑같음
}

서버 기록입니다. 예외가 있으면 표시되게 했는데 퇴장까지도 멀쩡히 찍히네요

  • [23:35:43] [정보] 서버 시작.
  • [23:40:24] [정보] 클라이언트 참여: 3
  • [23:40:26] [정보] 클라이언트 퇴장: 3
  • [23:40:28] [정보] 클라이언트 참여: 4
  • [23:40:29] [정보] 클라이언트 퇴장: 4
  • [23:40:31] [정보] 서버 정지.
  • [23:40:33] [정보] 서버 시작.
  • [23:40:34] [정보] 클라이언트 참여: 3
  • [23:40:37] [정보] 서버 정지.
  • [23:53:39] [정보] 서버 시작.
  • [23:53:41] [정보] 서버 정지.
  • [23:57:02] [정보] 서버 시작.
  • [23:57:04] [정보] 클라이언트 참여: 3
  • [23:57:06] [정보] 클라이언트 퇴장: 3
  • [23:58:11] [정보] 클라이언트 참여: 4
  • [23:58:34] [정보] 클라이언트 퇴장: 4
  • [23:59:13] [정보] 클라이언트 참여: 5

해당 문제는 CNetServer 혹은 CNetClient보다 먼저 해당 CNetServer 혹은 CNetClient에 부착되어 있던 Stub 내지는 Proxy 객체를 지워버리셔서 발생하는 경고 문구입니다.

CNetServer 혹은 CNetClient를 먼저 delete 하신 뒤 부착되어 있던 Stub 내지 Proxy 객체를 delete 하시면 됩니다.