kinnay/NintendoClients

MatchamkeExtensionServer issues with single Data<Gathering> outputs

EpicUsername12 opened this issue · 0 comments

The following methods have an implementation issue:

They all respond with a single Data<Gathering>

But in the python MatchmakeExtensionServer, the handler expects that:

response = await self.auto_matchmake_postpone(client, gathering, message)
#--- response ---
if not isinstance(response, common.Data):
raise RuntimeError("Expected common.Data, got %s" %response.__class__.__name__)
output.anydata(response)

This check is generated if and only if a method returns a single Data<T>, otherwise it just checks that the response contain the correct fields, with no typechecking.

So if the implementation returns a MatchmakeSession, it should be valid, but since it doesn't inherit from common.Data (but common.Structure, even though it's registered in the DataHolder list), this check fails, and the error is raised.

  • A quick manual fix is to remove the if case, and it works as expected since the Gathering types are all registered in the DataHolder

NOTE: This might be occuring in other protocols, but i didn't bother checking

So a long term fix may be to add a check in the generate_protocols.py script so it checks the object is of a type registered in the DataHolder registry instead of checking the response is an instance of common.Data, i'm waiting for your input on that.