I believe the issue is that the existing lobby members don’t get added the Lobby Details in this call in LobbiesEOSGSTypes.cpp
TFuture<TDefaultErrorResultInternal<TSharedRef<FLobbyDataEOS>>> FLobbyDataEOS::Create(
TSharedRef<FLobbyPrerequisitesEOS> Prerequisites,
FLobbyId LobbyId,
const TSharedRef<FLobbyDetailsEOS>& LobbyDetails,
FUnregisterFn UnregisterFn)
{
TPromise<TDefaultErrorResultInternal<TSharedRef<FLobbyDataEOS>>> Promise;
TFuture<TDefaultErrorResultInternal<TSharedRef<FLobbyDataEOS>>> Future = Promise.GetFuture();
LobbyDetails->GetLobbySnapshot(false)
Since the existing members aren’t there, they don’t get added the lobby snapshot in the subsequent code
// Fetch member data and apply them to the lobby.
TMap<FAccountId, FLobbyMemberServiceSnapshot> MemberSnapshots;
for (FAccountId MemberAccountId : LobbySnapshot.Members)
{
TDefaultErrorResultInternal<FLobbyMemberServiceSnapshot> LobbyMemberSnapshotResult = LobbyDetails->GetLobbyMemberSnapshot(MemberAccountId);
if (LobbyMemberSnapshotResult.IsError())
{
UE_LOG(LogOnlineServices, Warning, TEXT("[FLobbyDataEOS::Create] FLobbyDetailsEOS::GetLobbyMemberSnapshot Failed: Lobby[%s], User[%s], Result[%s]"),
*ToLogString(LobbyId), *ToLogString(MemberAccountId), *Result.GetErrorValue().GetLogString());
Promise.EmplaceValue(MoveTemp(LobbyMemberSnapshotResult.GetErrorValue()));
return;
}
MemberSnapshots.Emplace(MemberAccountId, MoveTemp(LobbyMemberSnapshotResult.GetOkValue()));
}
TOnlineResult<FLobbyClientDataPrepareServiceSnapshot> PrepareServiceLobbySnapshotResult =
NewLobbyClientData->PrepareServiceSnapshot({ MoveTemp(LobbySnapshot), MoveTemp(MemberSnapshots), {} });
where it prepares the lobby snapshot. Because of this, even though they are in the Lobby Data members in some later parts of the code, they don’t get added to the lobby snapshot which is what gets bubbled up to the player. As far as I can tell, they don’t get added any time later, so, player C never sees them in the lobby snapshot.
I wanted to change that call in the FLobbyDataEOS::Create from
LobbyDetails->GetLobbySnapshot(false)
to
LobbyDetails->GetLobbySnapshot(true)
Does that make sense to do? When I tried it out, it appears to be working as expected
[Attachment Removed]