跳转到主要内容

连接聊天服务器

连接聊天服务器。

方法 信息

内容
方法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路径Bug

Unreal Engine的libwebsockets库在URL没有路径的情况下会以//发送请求的Bug。由此可能导致部分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");
参考

此Bug在Unreal Engine 5.x的libwebsockets实现中发生。PlayNANOO SDK已在内部处理此问题,因此使用SDK时无需额外处理。