본문으로 건너뛰기

채팅 서버 연결

채팅 서버에 연결합니다.

메서드 정보

항목내용
메서드AChatManager::GetInstance()->Connect(IChatListener* Listener)
콜백OnConnected() - 연결 성공 시 호출

코드 예제

// IChatListener 구현 클래스
void UMyGame::ConnectToChat()
{
AChatManager::GetInstance()->Connect(this);
}

void UMyGame::OnConnected()
{
UE_LOG(LogTemp, Log, TEXT("Chat Connected"));
AChatManager::GetInstance()->Subscribe(TEXT("CH01"));
}

void UMyGame::OnDisconnected()
{
UE_LOG(LogTemp, Log, TEXT("Chat Disconnected"));
}

void UMyGame::OnError(const FString& Code, const FString& Message)
{
UE_LOG(LogTemp, Error, TEXT("Chat Error: [%s] %s"), *Code, *Message);
}

void UMyGame::OnPublicMessage(const FChatUserInfo& Sender, const FString& Message)
{
UE_LOG(LogTemp, Log, TEXT("[%s] %s"), *Sender.visitorName, *Message);
}

void UMyGame::OnPrivateMessage(const FChatUserInfo& Sender, const FString& Message)
{
UE_LOG(LogTemp, Log, TEXT("[귓속말 from %s] %s"), *Sender.visitorName, *Message);
}

void UMyGame::OnNotifyMessage(const FChatUserInfo& Sender, const FString& Message)
{
UE_LOG(LogTemp, Log, TEXT("[시스템] %s"), *Message);
}

void UMyGame::OnSubscribed(const FChatUserInfo& User)
{
UE_LOG(LogTemp, Log, TEXT("%s 입장"), *User.visitorName);
}

void UMyGame::OnUnSubscribed(const FChatUserInfo& User)
{
UE_LOG(LogTemp, Log, TEXT("%s 퇴장"), *User.visitorName);
}

void UMyGame::OnChannels(const TArray<FChatChannelInfo>& Channels)
{
for (const auto& Channel : Channels)
{
UE_LOG(LogTemp, Log, TEXT("Channel: %s, Users: %d"), *Channel.channel, Channel.count);
}
}

void UMyGame::OnPlayerOnline(const TArray<FChatPlayerInfo>& Players)
{
for (const auto& Player : Players)
{
UE_LOG(LogTemp, Log, TEXT("Player: %s, Online: %s"), *Player.userUniqueId, *Player.online);
}
}
IChatListener 구현 필요

채팅 기능을 사용하려면 클래스가 IChatListener 인터페이스를 구현해야 합니다.

알려진 이슈

Unreal Engine WebSocket 경로 버그

Unreal Engine의 libwebsockets 라이브러리는 URL에 경로가 없을 경우 //를 요청하는 버그가 있습니다. 이로 인해 일부 WebSocket 서버에서 연결이 실패하거나 즉시 종료될 수 있습니다.

증상:

  • WebSocket 연결이 성공 직후 바로 종료됨
  • OnClosed 콜백이 비정상적인 종료 코드와 함께 호출됨
  • Unity에서는 동일한 서버로 정상 연결되지만 Unreal에서만 실패

해결 방법: WebSocket URL에 명시적으로 / 경로를 추가합니다.

// 잘못된 예 (버그 발생 가능)
FString Url = TEXT("wss://example.com:3001?param=value");

// 올바른 예 (경로 '/' 명시)
FString Url = TEXT("wss://example.com:3001/?param=value");
참고

이 버그는 Unreal Engine 5.x의 libwebsockets 구현에서 발생합니다. PlayNANOO SDK는 이 문제를 내부적으로 처리하므로 SDK 사용 시에는 별도 조치가 필요하지 않습니다.