UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
XmppMultiUserChatStrophe.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "XmppMultiUserChat.h"
7
8#include "Containers/Ticker.h"
9#include "Containers/Queue.h"
10
11#if WITH_XMPP_STROPHE
12
14class FStropheStanza;
15
16#define MAX_MESSAGE_HISTORY 50
17
18enum class ERoomStatusStrophe : uint8
19{
21 Joined,
26};
27
29{
30 switch (Value)
31 {
32 case ERoomStatusStrophe::NotJoined:
33 return TEXT("NotJoined");
34 case ERoomStatusStrophe::Joined:
35 return TEXT("Joined");
36 case ERoomStatusStrophe::CreatePending:
37 return TEXT("CreatePending");
38 case ERoomStatusStrophe::JoinPrivatePending:
39 return TEXT("JoinPrivatePending");
40 case ERoomStatusStrophe::JoinPublicPending:
41 return TEXT("JoinPublicPending");
42 case ERoomStatusStrophe::ExitPending:
43 return TEXT("ExitPending");
44 }
45
46 checkf(false, TEXT("Unhandled ERoomStatusStrophe %d"), static_cast<int32>(Value));
47 return TEXT("Unknown");
48}
49
54{
55public:
56
59 {
60 }
61
63 {
66 {
67 LastMessages.RemoveAt(0);
68 }
69 }
70
77 bool HasMember(const FXmppUserJid& RoomMemberJid) const
78 {
79 FXmppChatMemberPtr FoundMember = GetMember(RoomMemberJid);
80 return FoundMember.IsValid();
81 }
82
89 FXmppChatMemberPtr GetMember(const FXmppUserJid& RoomMemberJid) const
90 {
91 for (const FXmppChatMemberRef& Member : Members)
92 {
93 if (Member->RoomMemberJid == RoomMemberJid)
94 {
95 return Member;
96 }
97 }
98
99 return FXmppChatMemberPtr();
100 }
101
102 FXmppRoomId& GetRoomId() { return Info.Id; }
103 const FXmppRoomId& GetRoomId() const { return Info.Id; }
104
105 FString& GetNickname() { return RoomJid.Resource; };
106 const FString& GetNickname() const { return RoomJid.Resource; };
107
108 FXmppUserJid& GetRoomJid() { return RoomJid; }
109 const FXmppUserJid& GetRoomJid() const { return RoomJid; }
110
111public:
113
114 ERoomStatusStrophe Status;
118};
119
122{
123 FString ErrorMessage;
125};
126
129{
130 FString NewSubject;
132};
133
135{
136 NoCallback, // Trigger no callbacks. Currently used for global chat config.
137 UseCreateCallback, // New room config, trigger create callback when done
138 UseConfigCallback // Change existing room, trigger config callback when done
139};
140
141class FXmppMultiUserChatStrophe
142 : public IXmppMultiUserChat
143 , public FTSTickerObjectBase
144{
145public:
146 // FXmppMultiUserChatStrophe
147 FXmppMultiUserChatStrophe(class FXmppConnectionStrophe& InConnectionManager);
149
150 // XMPP Thread
158
159 // Game Thread
160 void OnDisconnect();
161 void OnReconnect();
162
163 // IXmppMultiUserChat
164 virtual bool CreateRoom(const FXmppRoomId& RoomId, const FString& Nickname, const FXmppRoomConfig& RoomConfig) override;
165 virtual bool ConfigureRoom(const FXmppRoomId& RoomId, const FXmppRoomConfig& RoomConfig) override;
166 virtual bool RefreshRoomInfo(const FXmppRoomId& RoomId) override;
167 virtual bool JoinPublicRoom(const FXmppRoomId& RoomId, const FString& Nickname) override;
168 virtual bool JoinPrivateRoom(const FXmppRoomId& RoomId, const FString& Nickname, const FString& Password) override;
169 virtual bool RegisterMember(const FXmppRoomId& RoomId, const FString& Nickname) override;
170 virtual bool UnregisterMember(const FXmppRoomId& RoomId, const FString& Nickname) override;
171 virtual bool ExitRoom(const FXmppRoomId& RoomId) override;
172 virtual bool SendChat(const FXmppRoomId& RoomId, const class FString& MsgBody, const FString& ChatInfo) override;
173 virtual void GetJoinedRooms(TArray<FXmppRoomId>& OutRooms) override;
174 virtual bool GetRoomInfo(const FXmppRoomId& RoomId, FXmppRoomInfo& OutRoomInfo) override;
175 virtual bool GetMembers(const FXmppRoomId& RoomId, TArray<FXmppChatMemberRef>& OutMembers) override;
176 virtual FXmppChatMemberPtr GetMember(const FXmppRoomId& RoomId, const FXmppUserJid& MemberJid) override;
177 virtual bool GetLastMessages(const FXmppRoomId& RoomId, int32 NumMessages, TArray< TSharedRef<FXmppChatMessage> >& OutMessages) override;
178 virtual void HandleMucPresence(const FXmppMucPresence& MemberPresence) override;
179 virtual void DumpMultiUserChatState() const override;
190
191 // FTSTickerObjectBase
192 virtual bool Tick(float DeltaTime) override;
193
194protected:
202
203 bool SendJoinRoomStanza(const FXmppRoomStrophe& Room, const FString& Password = FString());
206
208
209 // Events that happen to us
214
215 // Events that happen to others in our rooms
219
221 void CleanupMessages();
222
223protected:
226
229
234
249
261};
262#endif
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const TCHAR * LexToString(EAnalyticsRecordEventMode Mode)
Definition IAnalyticsProvider.cpp:5
FString FXmppRoomId
Definition XmppMultiUserChat.h:13
TSharedPtr< FXmppChatMember, ESPMode::ThreadSafe > FXmppChatMemberPtr
Definition XmppMultiUserChat.h:185
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Ticker.h:137
Definition XmppPresence.h:94
Definition XmppMultiUserChat.h:213
Definition XmppMultiUserChat.h:192
Definition XmppConnection.h:99
Definition XmppMultiUserChat.h:294
virtual FOnXmppRoomConfigureComplete & OnRoomConfigured()=0
virtual FOnXmppRoomJoinPrivateComplete & OnJoinPrivateRoom()=0
virtual bool RegisterMember(const FXmppRoomId &RoomId, const FString &Nickname)=0
virtual FOnXmppRoomInfoRefreshComplete & OnRoomInfoRefreshed()=0
virtual FOnXmppRoomJoinPublicComplete & OnJoinPublicRoom()=0
virtual bool JoinPublicRoom(const FXmppRoomId &RoomId, const FString &Nickname)=0
virtual FOnXmppRoomChatReceived & OnRoomChatReceived()=0
virtual bool JoinPrivateRoom(const FXmppRoomId &RoomId, const FString &Nickname, const FString &Password)=0
virtual FOnXmppRoomExitComplete & OnExitRoom()=0
virtual bool SendChat(const FXmppRoomId &RoomId, const FString &MsgBody, const FString &ChatInfo)=0
virtual FOnXmppRoomCreateComplete & OnRoomCreated()=0
virtual bool ConfigureRoom(const FXmppRoomId &RoomId, const FXmppRoomConfig &RoomConfig)=0
virtual FXmppChatMemberPtr GetMember(const FXmppRoomId &RoomId, const FXmppUserJid &MemberJid)=0
virtual FOnXmppRoomMemberExit & OnRoomMemberExit()=0
virtual bool GetRoomInfo(const FXmppRoomId &RoomId, FXmppRoomInfo &OutRoomInfo)=0
virtual bool CreateRoom(const FXmppRoomId &RoomId, const FString &Nickname, const FXmppRoomConfig &RoomConfig=FXmppRoomConfig())=0
virtual FOnXmppRoomMemberChanged & OnRoomMemberChanged()=0
virtual bool UnregisterMember(const FXmppRoomId &RoomId, const FString &Nickname)=0
virtual bool GetMembers(const FXmppRoomId &RoomId, TArray< FXmppChatMemberRef > &OutMembers)=0
virtual void HandleMucPresence(const FXmppMucPresence &MemberPresence)=0
virtual void GetJoinedRooms(TArray< FXmppRoomId > &OutRooms)=0
virtual FOnXmppRoomMemberJoin & OnRoomMemberJoin()=0
virtual bool RefreshRoomInfo(const FXmppRoomId &RoomId)=0
virtual bool ExitRoom(const FXmppRoomId &RoomId)=0
virtual bool GetLastMessages(const FXmppRoomId &RoomId, int32 NumMessages, TArray< TSharedRef< FXmppChatMessage > > &OutMessages)=0
virtual void DumpMultiUserChatState() const =0
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition Queue.h:48
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition UniquePtr.h:107
@ Member
Definition AssetDataTagMap.cpp:938