채팅 서버 연결
채팅 서버에 연결합니다.
메서드 정보
| 항목 | 내용 |
|---|---|
| 메서드 | 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 사용 시에는 별도 조치가 필요하지 않습니다.