Ok I looked at it and their example client interface uses “End Session” not “Destroy Session” (I remember this is why I ended up implementing it). Also destroy session has dedicated server flags and sends a notice to steam to shut down the server entirely.
99% sure as it stands that Destroy Session for the host and End Session for the client is the correct behavior. Why it is taking so long I am not sure, it waits for a response from the steam subsystem before finishing but it shouldn’t be slow. On the server shutting down it should send a notice to each client who will then call “End Session” to leave before the server calls “Destroy Session” to end the server instance.
I have however re-uploaded the plugin for 4.9.2 and added an additional check on EndSession for if the session is still live or not. It may be possible that in some cases the session has already ended and the end session call gets stuck trying to complete. (this should have been in to begin with, I missed it).
// Client example
FDelegateHandle Result;
IOnlineSessionPtr SessionInt = GetSessionInt();
if (SessionInt.IsValid())
{
Result = SessionInt->AddOnEndSessionCompleteDelegate_Handle(Delegate);
SessionInt->EndSession(SessionName);
}
else
{
Delegate.ExecuteIfBound(SessionName, true);
}
return Result;
}