UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
XmppMultiUserChat.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 "XmppConnection.h"
7#include "XmppPresence.h"
8#include "XmppChat.h"
9
13typedef FString FXmppRoomId;
14
21{
22 enum Type
23 {
26 /* An admin or owner enters a room as a moderator */
28 /* A member enters a room as a participant. */
29 /* As a default, an unaffiliated user enters a moderated room as a visitor, and enters an open room as a participant. */
34 None
35 };
36
37 inline const TCHAR* ToString(Type Affiliation)
38 {
39 switch (Affiliation)
40 {
41 case Owner:
42 return TEXT("Owner");
43 case Admin:
44 return TEXT("Admin");
45 case Member:
46 return TEXT("Member");
47 case Outcast:
48 return TEXT("Outcast");
49 case None:
50 default:
51 return TEXT("None");
52 }
53 }
54
55 inline Type ToType(const FString& Affiliation)
56 {
57 if (Affiliation == TEXT("Owner"))
58 {
59 return Owner;
60 }
61 else if (Affiliation == TEXT("Admin"))
62 {
63 return Admin;
64 }
65 else if (Affiliation == TEXT("Member"))
66 {
67 return Member;
68 }
69 else if (Affiliation == TEXT("Outcast"))
70 {
71 return Outcast;
72 }
73 else
74 {
75 return None;
76 }
77 }
78}
79
86{
87 enum Type
88 {
89 /* A moderator is the most powerful role within the context of the room, and can to some extent manage other occupants' roles in the room. */
91 /* A participant has fewer privileges than a moderator, although they always have the right to speak. */
93 /* A visitor is a more restricted role within the context of a moderated room */
95 None
96 };
97
98 inline const TCHAR* ToString(Type Role)
99 {
100 switch (Role)
101 {
102 case Moderator:
103 return TEXT("Moderator");
104 case Participant:
105 return TEXT("Participant");
106 case Visitor:
107 return TEXT("Visitor");
108 case None:
109 default:
110 return TEXT("None");
111 }
112 }
113
114 inline Type ToType(const FString& Role)
115 {
116 if (Role == TEXT("Moderator"))
117 {
118 return Moderator;
119 }
120 else if (Role == TEXT("Participant"))
121 {
122 return Participant;
123 }
124 else if (Role == TEXT("Visitor"))
125 {
126 return Visitor;
127 }
128 else
129 {
130 return None;
131 }
132 }
133}
134
184
187
192{
193public:
197
199 FString OwnerId;
200 FString Subject;
202
203 FString ToDebugString() const
204 {
205 return FString::Printf(TEXT("%s Owner: %s Subj: %s Priv: %d"), *Id, *OwnerId, *Subject, bIsPrivate);
206 }
207};
208
213{
214public:
216 : RoomName(TEXT(""))
217 , RoomDesc(TEXT(""))
219 , Password(TEXT(""))
221 , bAllowPublicSearch(false)
222 , bIsModerated(false)
223 , bIsMembersOnly(false)
224 , bAllowChangeSubject(false)
225 , MaxMsgHistory(0)
226 , RoomAnonymity(ERoomAnonymity::Semianonymous)
227 {}
228
229 enum class ERoomAnonymity
230 {
234 };
235
237 {
239 {
240 return TEXT("nonanonymous");
241 }
243 {
244 return TEXT("semianonymous");
245 }
247 {
248 return TEXT("fullanonymous");
249 }
250 else
251 {
252 return TEXT("INVALID ROOMANONYMITY ENUM");
253 }
254 }
255
256 // <field type = "text-single" label = "Natural-Language Room Name" var = "muc#roomconfig_roomname">
257 FString RoomName;
258 // <field type = "text-single" label = "Short Description of Room" var = "muc#roomconfig_roomdesc">
259 FString RoomDesc;
260 // <field type = "boolean" label = "Password Required to Enter?" var = "muc#roomconfig_passwordprotectedroom">
262 // <field type = "text-single" label = "Password" var = "muc#roomconfig_roomsecret">
263 FString Password;
264 // <field type = "boolean" label = "Make Room Persistent?" var = "muc#roomconfig_persistentroom">
266
267private:
268 // These fields are not used yet. Move to public when hooking up
269 // <field type = "boolean" label = "Make Room Publicly Searchable?" var = "muc#roomconfig_publicroom">
270 bool bAllowPublicSearch;
271 // <field type = "boolean" label = "Make Room Moderated?" var = "muc#roomconfig_moderatedroom">
272 bool bIsModerated;
273 // <field type = "boolean" label = "Make Room Members Only?" var = "muc#roomconfig_membersonly">
274 bool bIsMembersOnly;
275 // <field type = "boolean" label = "Allow Occupants to Change Subject?" var = "muc#roomconfig_changesubject">
276 bool bAllowChangeSubject;
277 // <field type = "text-single" label = "Maximum Number of History Messages Returned by Room" var = "muc#maxhistoryfetch">
278 int32 MaxMsgHistory;
279 // <field type = "list-single" label = "Room anonymity level:" var = "muc#roomconfig_anonymity">
280 ERoomAnonymity RoomAnonymity;
281 // <field type = "list-single" label = "Presence delivery logic" var = "tigase#presence_delivery_logic">
282 // <field type = "boolean" label = "Enable filtering of presence (broadcasting presence only between selected groups" var = "tigase#presence_filtering">
283 // <field type = "list-multi" label = "Affiliations for which presence should be delivered" var = "tigase#presence_filtered_affiliations">
284
285 // Allow RoomConfigOp to use the defaults we don't expose yet for consumers to change
288};
289
294{
295public:
296
298
299 virtual bool CreateRoom(const FXmppRoomId& RoomId, const FString& Nickname, const FXmppRoomConfig& RoomConfig = FXmppRoomConfig()) = 0;
301 virtual bool JoinPublicRoom(const FXmppRoomId& RoomId, const FString& Nickname) = 0;
302 virtual bool JoinPrivateRoom(const FXmppRoomId& RoomId, const FString& Nickname, const FString& Password) = 0;
303 virtual bool RegisterMember(const FXmppRoomId& RoomId, const FString& Nickname) = 0;
304 virtual bool UnregisterMember(const FXmppRoomId& RoomId, const FString& Nickname) = 0;
305 virtual bool ExitRoom(const FXmppRoomId& RoomId) = 0;
306 virtual bool SendChat(const FXmppRoomId& RoomId, const FString& MsgBody, const FString& ChatInfo) = 0;
308 virtual bool RefreshRoomInfo(const FXmppRoomId& RoomId) = 0;
311 virtual FXmppChatMemberPtr GetMember(const FXmppRoomId& RoomId, const FXmppUserJid& MemberJid) = 0;
314 virtual void DumpMultiUserChatState() const = 0;
315
316 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomCreateComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
319
320 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomConfigureComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
323
324 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomInfoRefreshComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
327
328 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomJoinPublicComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
331
332 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomJoinPrivateComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
335
336 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomExitComplete, const TSharedRef<IXmppConnection>& /*Connection*/, bool /*bSuccess*/, const FXmppRoomId& /*RoomId*/, const FString& /*Error*/);
339
349
353
357
358 DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomChatReceived, const TSharedRef<IXmppConnection>& /*Connection*/, const FXmppRoomId& /*RoomId*/, const FXmppUserJid& /*RoomMemberJid*/, const TSharedRef<FXmppChatMessage>& /*ChatMsg*/);
361};
#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
return true
Definition ExternalRpcRegistry.cpp:601
FString FXmppRoomId
Definition XmppMultiUserChat.h:13
TSharedPtr< FXmppChatMember, ESPMode::ThreadSafe > FXmppChatMemberPtr
Definition XmppMultiUserChat.h:185
TSharedRef< FXmppChatMember, ESPMode::ThreadSafe > FXmppChatMemberRef
Definition XmppMultiUserChat.h:186
Definition XmppMultiUserChat.h:139
FString Nickname
Definition XmppMultiUserChat.h:157
EXmppChatMemberAffiliation::Type Affiliation
Definition XmppMultiUserChat.h:174
FXmppUserJid UserJid
Definition XmppMultiUserChat.h:170
FXmppUserJid RoomMemberJid
Definition XmppMultiUserChat.h:163
FString ToDebugString() const
Definition XmppMultiUserChat.h:179
FXmppChatMember(const FXmppMucPresence &MemberPresence)
Definition XmppMultiUserChat.h:146
EXmppChatMemberRole::Type Role
Definition XmppMultiUserChat.h:176
FXmppChatMember()
Definition XmppMultiUserChat.h:141
FXmppUserPresence UserPresence
Definition XmppMultiUserChat.h:172
Definition XmppPresence.h:94
Definition XmppMultiUserChat.h:213
friend class FXmppChatRoomConfigOp
Definition XmppMultiUserChat.h:286
friend class FXmppMultiUserChatStrophe
Definition XmppMultiUserChat.h:287
FString RoomDesc
Definition XmppMultiUserChat.h:259
bool bIsPersistent
Definition XmppMultiUserChat.h:265
static const FString ConvertRoomAnonymityToString(ERoomAnonymity InRoomAnonymity)
Definition XmppMultiUserChat.h:236
FString Password
Definition XmppMultiUserChat.h:263
FXmppRoomConfig()
Definition XmppMultiUserChat.h:215
FString RoomName
Definition XmppMultiUserChat.h:257
ERoomAnonymity
Definition XmppMultiUserChat.h:230
bool bIsPrivate
Definition XmppMultiUserChat.h:261
Definition XmppMultiUserChat.h:192
bool bIsPrivate
Definition XmppMultiUserChat.h:201
FString Subject
Definition XmppMultiUserChat.h:200
FString OwnerId
Definition XmppMultiUserChat.h:199
FXmppRoomInfo()
Definition XmppMultiUserChat.h:194
FXmppRoomId Id
Definition XmppMultiUserChat.h:198
FString ToDebugString() const
Definition XmppMultiUserChat.h:203
Definition XmppConnection.h:99
XMPP_API FString ToDebugString() const
Definition XmppConnection.cpp:119
Definition XmppPresence.h:55
Definition XmppMultiUserChat.h:294
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomChatReceived, const TSharedRef< IXmppConnection > &, const FXmppRoomId &, const FXmppUserJid &, const TSharedRef< FXmppChatMessage > &)
virtual FOnXmppRoomConfigureComplete & OnRoomConfigured()=0
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomJoinPublicComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnXmppRoomMemberChanged, const TSharedRef< IXmppConnection > &, const FXmppRoomId &, const FXmppUserJid &)
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
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomConfigureComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
virtual bool ConfigureRoom(const FXmppRoomId &RoomId, const FXmppRoomConfig &RoomConfig)=0
virtual FXmppChatMemberPtr GetMember(const FXmppRoomId &RoomId, const FXmppUserJid &MemberJid)=0
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomJoinPrivateComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
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 ~IXmppMultiUserChat()
Definition XmppMultiUserChat.h:297
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
DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnXmppRoomMemberJoin, const TSharedRef< IXmppConnection > &, const FXmppRoomId &, const FXmppUserJid &)
virtual FOnXmppRoomMemberJoin & OnRoomMemberJoin()=0
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomExitComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
virtual bool RefreshRoomInfo(const FXmppRoomId &RoomId)=0
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomCreateComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnXmppRoomMemberExit, const TSharedRef< IXmppConnection > &, const FXmppRoomId &, const FXmppUserJid &)
DECLARE_MULTICAST_DELEGATE_FourParams(FOnXmppRoomInfoRefreshComplete, const TSharedRef< IXmppConnection > &, bool, const FXmppRoomId &, const FString &)
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 SharedPointer.h:692
Definition SharedPointer.h:153
Definition XmppMultiUserChat.h:21
Type ToType(const FString &Affiliation)
Definition XmppMultiUserChat.h:55
Type
Definition XmppMultiUserChat.h:23
@ Member
Definition XmppMultiUserChat.h:30
@ None
Definition XmppMultiUserChat.h:34
@ Owner
Definition XmppMultiUserChat.h:25
@ Admin
Definition XmppMultiUserChat.h:27
@ Outcast
Definition XmppMultiUserChat.h:32
Definition XmppMultiUserChat.h:86
Type ToType(const FString &Role)
Definition XmppMultiUserChat.h:114
Type
Definition XmppMultiUserChat.h:88
@ None
Definition XmppMultiUserChat.h:95
@ Participant
Definition XmppMultiUserChat.h:92
@ Visitor
Definition XmppMultiUserChat.h:94
@ Moderator
Definition XmppMultiUserChat.h:90
@ false
Definition radaudio_common.h:23