-
Notifications
You must be signed in to change notification settings - Fork 627
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Asking for clarification in Chat example #269
Comments
Yeah that looks like a bug, and the situation you describe (such as a transition direction from "connecting" to "problem detected locally") is possible. the code probably shouldn't check the state of the connection, it should just check if there is an existing entry in the map. |
Hello, I also noticed something: sometimes when my server app closes down connection with clients, void onSteamNetConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t* pInfo) {
switch (pInfo->m_info.m_eState)
{
case k_ESteamNetworkingConnectionState_None:
// sometimes we fall here immediately from k_ESteamNetworkingConnectionState_Connected when closing down connection
// fall-through
case k_ESteamNetworkingConnectionState_ClosedByPeer:
// fall-through
case k_ESteamNetworkingConnectionState_ProblemDetectedLocally:
{
// Ignore if they were not previously connected. (If they disconnected
// before we accepted the connection.)
if (pInfo->m_eOldState == k_ESteamNetworkingConnectionState_Connected)
{ ... |
Hi!
I've started integrating GNS into a pet project to analyze it, and the following felt wrong:
In ChatServer::OnSteamNetConnectionStatusChanged the code does the following:
However looking down in the same switch:
What's weird here is that an entry in
m_mapClients
gets inserted after receiving thek_ESteamNetworkingConnectionState_Connecting
message.However upon disconnection, (i.e.
_ClosedByPeer
&_ProblemDetectedLocally
) it assumes that if previous state was_Connecting
then there should be no entry inm_mapClients
.This sounds contradictory.
I can think of the following cases:
m_mapClients
_Connecting
. We should first check if there is an entry inm_mapClients
, and if there is one, remove it_ClosedByPeer
/_ProblemDetectedLocally
getting called after_Connecting
but before_Connected
means that GNS never got the chance to call our callbackI suspect this is likely a bug, which would make sense since the opportunity window for triggering it is ridiculously low (it needs to disconnect after
_Connecting
but before anything else, or perhaps due to how GNS works internally, that situation can't actually happen).The text was updated successfully, but these errors were encountered: