连接聊天服务器
连接聊天服务器。
方法 信息
| 项 | 内容 |
|---|---|
| 方法 | 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时无需额外处理。