IOnlinePartyInterface / Party System Implementation

I’m currently trying to get to grips with some of the advanced networking stuff available in the engine, like Beacons and Parties etc but I’m running into some brickwalls.

It seems like there’s no default Party Interface to fall back to for sending events between unconnected players. I was under the impression that this was exactly what the Party Interface / beacon system was for - to allow unconnected players to send requests / data to each other but it seems like this is a PS4 / Xbox only feature right now.

Unreal Tournament supports pretty much everything I want to do - but I’m assuming there’s an Online Subsystem that works with Epic’s Launcher, cus I can’t find anything in the source code that’s much different to the engine. Right now I’m just trying to create a ‘PersistentParty’ when a player logs into the main menu. I kind of want to replicate Gears of War 3’s Party system because it was really good and it suits me perfectly.

  1. Players should create a ‘Party’ when they login to the main menu.
  2. Menu party can be Invite Only, Friends Only, Public etc
  3. Party host can search for online lobbies or host a new lobby.
  4. A ‘Lobby’ is a special kind of Party that can be searched for by the public, original lobby leader configs game settings then transports all players to the actual match.

Problem is there doesn’t seem to be a default party interface, and all the subsystems return nullptr for IOnlinePartyInterface.

This is where I am so far. “UBZGame_PartyManager” is a class that inherits from UParty. I’ve included the Party, Qos and Lobby modules - and enabled the OnlineFramework plugin. I get a failure when trying to create the Persistent party saying no interface exists. Tried this in both PIE and Standalone with Steam - nothing.



void UBZGame_LocalPlayer::TryCreatePersistentParty()
{
	IOnlineIdentityPtr OnlineIDInterface = Online::GetIdentityInterface();
        TSharedPtr<const FUniqueNetId> UserID = OnlineIDInterface->GetUniquePlayerId(GetControllerId());

	const UBZGame_NetworkManager* WorldNM = UBZGame_GameInstance::GetNetworkManager(this);
	UBZGame_PartyManager* WorldPM = WorldNM->GetPartyManager();

	// Skip if already in a persistent party?
	if (WorldPM->GetPersistentParty() != nullptr) { return; }

	WorldPM->CreatePersistentParty(*UserID);
}


Feel like this is stuff that @JoeGraf would know… More docs on Beacons / Parties and even better - a working example would be great!

Okay so after a little more asking around about this, it looks as though I currently have two options.

  1. Implement my own interface for the IOnlinePartySystem, and use UE4 sockets to send data back and forth. Since I’ve never done either of those things that could be a big hassle. Apparently there are some other caveats too, such as needing to reconnect when you join a server.

  2. Spool up an XMPP server and host it somewhere, and use that for the party system. I still need a working interface for the IOnlinePartySystem for this, and need to route everything through XMPP. Although this avoids the disconnection issue when joining another server - it does mean I have to pay for hosting.

  3. Spool up a local XMPP server and do all of the above without paying a penny, by having the party host spool it up? Is that even possible?

@TheJamsh How’s it going so far ?
I’m tackling with this problem since 3 months. There must be a better way without XMPP, like creating a session, naming it as USERID_party, inviting user to that session etc., right ?

I will update here if I manage to do it with sessions.

Any update on this? I am struggling trying to implement parties (similar to Rocket League) for Steam