PlayFab / PlayFabMultiplayerUnreal

PlayFab Online Subsystem Plugin for Unreal Engine
https://learn.microsoft.com/en-us/gaming/playfab/features/multiplayer/networking/party-unreal-engine-oss-overview
39 stars 35 forks source link

Matchmaking quickstart doc is not useful, dated, and raw C++ #32

Closed dylanh724 closed 1 year ago

dylanh724 commented 1 year ago

https://learn.microsoft.com/en-us/gaming/playfab/features/multiplayer/matchmaking/quickstart-client-sdk

nassosterz-ms commented 1 year ago

These docs you are referring to are mostly targeting the users who consume the raw C++ SDK. The UE PF OSS is open source and contains implementations of this API in the UE context. You can skim through the code and read about them.

Since the C++ SDK for matchmaking is the core API and UE pretty much adapts it to the UE matchmaking, reading the code for now would be the best way to go about it.

We might consider in the future adding specific examples for UE.

Also, I am taking the opportunity in this answer to let you know that we have logged bugs / issues for everything you have reported and we are considering them.

dylanh724 commented 1 year ago

(Edit: The goal of this lengthy comment is to offer perspective that seems to be misguided from PFs side - this issue needs to be reopened)

You can skim through the code and read about them.

Since the C++ SDK for matchmaking is the core API and UE pretty much adapts it to the UE matchmaking, reading the code for now would be the best way to go about it.

@nassosterz-ms This is both a dangerous and incorrect assumption. You likely have no interaction with the customer end after hearing this - have you even seen the Discord Unreal channel? The forum? People have NO clue what to do - it's vastly, vastly different from UE4 C++.

The C++ SDK matches the API doc while Unreal OSS has COMPLETELY different naming conventions and namespaces. Not even Unreals OSS docs help me because the map of vocab between Unreal and yours is so different. It doesn't matter if the C++ is the core API if you have a giant wrapper around it. That's like if I told you to learn React and said "don't worry, the core code is JavaScript so just see JS docs".

To add to this, you have 0 comments/documentation inline, either, which is completely non-standard for any language (and especially shunned from Microsoft, as I'm certified myself and know the 101 push is always leave documentation). Even looking at the repo, you guys dump thousands of lines of code per file. It's essentially only ~8 files. Anyone can release a wrapper, but without comments or documentation it's useless as the entire point is supposed to be to save time. My friend, no one has saved time using this repo.

On top of all this; Microsoft is now running this. Whoever says that documentation or comments isn't required is clearly not communicating with upper mgmt that deals with the end-users that actually need to use this commentless, docless repo.

Beyond code, no one knows the workflow or best practices, either. I'm sure I'm not the only one paranoid since this is the FOURTH matchmaking API I'm coding (since Client/Matchmaking and Matchmaker were obsolete without telling us). Your tutorial says to use both the Multiplayer Api (that you also call the Core API). Yet, there are redundant calls on each side. No one knows if there are pre requisites. No one knows how to use them both, despite the tutorial saying they should use both. No one knows if I need to set a local session before adding to matchmaking callbacks.

Not even PF staff knows. They send you to Unreals docs that, again, don't describe how to use this sdk with the other multiplayer "other core" (you guys need to have naming consistency - other issue) marketplace plugin sdk. No one knows if you can create a ticket with marketplace plugin and create an event with the OSS SDK and that works. No one knows if that websocket init issue reported back in September 2022 is still broken or not (other issue). No one knows if I need to init anything first on PFs side. No one knows if I need to create a OSS "Session" first.

No one knows anything - and if you say "reading the c++ docs is good enough", this goes against all Microsoft's philosophies and dooms your end users to face the burden of non-standard, commentless non-ue4 c++ code that does not translate to ue4 OSS C++ code whatsoever and doesn't even use the same naming conventions at all.

Eg, OSS Session is PF Matchmaking. OSS OnMatchmakingComplete could be either be the callback to create or join ticket or could be the match found, no clue. The callback includes a param Name. This was supposed to be generalized for the interface where PF is supposed to rename it and comment, but alas - were just left with .... Name. Because that's good enough? MatchId? MatchmakingTicketId? Something else? There's no vocab map between OSS:PF. EntityId is... No one knows. There is no clue, no hint. Your c++ docs need to init and set entityId, but we have no clue what to call from OSS side. We don't even know what EntityId vocab maps to on OSS side. SessionId? No one knows.

I know this is long, but please read. This is the experience from someone that has implemented 5+ BaaS competitors no problem and even coding the BaaS SDKs themselves, but only has issues with playfab. Imagine if this was someone's exp for the first time with an online service? They would be utterly destroyed by this sdk.

(Edit: The goal of this lengthy comment is to offer perspective that seems to be misguided from PFs side - this issue needs to be reopened)