diff --git a/Source/DiabloUI/selgame.cpp b/Source/DiabloUI/selgame.cpp index b328b0b9e..e634ff47f 100644 --- a/Source/DiabloUI/selgame.cpp +++ b/Source/DiabloUI/selgame.cpp @@ -538,8 +538,7 @@ void RefreshGameList() uint32_t currentTime = SDL_GetTicks(); - if (lastRequest == 0 || currentTime - lastRequest > 30000) { - DvlNet_SendInfoRequest(); + if ((lastRequest == 0 || currentTime - lastRequest > 30000) && DvlNet_SendInfoRequest()) { lastRequest = currentTime; lastUpdate = currentTime - 3000; // Give 2 sec for responses, but don't wait 5 } diff --git a/Source/dvlnet/abstract_net.h b/Source/dvlnet/abstract_net.h index 8a503ff79..befe3b8c1 100644 --- a/Source/dvlnet/abstract_net.h +++ b/Source/dvlnet/abstract_net.h @@ -48,8 +48,9 @@ public: { } - virtual void send_info_request() + virtual bool send_info_request() { + return true; } virtual void clear_gamelist() diff --git a/Source/dvlnet/base_protocol.h b/Source/dvlnet/base_protocol.h index d595dd64f..ccf87e761 100644 --- a/Source/dvlnet/base_protocol.h +++ b/Source/dvlnet/base_protocol.h @@ -25,7 +25,7 @@ public: virtual bool SNetLeaveGame(int type); virtual std::string make_default_gamename(); - virtual void send_info_request(); + virtual bool send_info_request(); virtual void clear_gamelist(); virtual std::vector get_gamelist(); @@ -97,12 +97,13 @@ bool base_protocol

::wait_firstpeer() } template -void base_protocol

::send_info_request() +bool base_protocol

::send_info_request() { - if (wait_network()) { - auto pkt = pktfty->make_packet(PLR_BROADCAST, PLR_MASTER); - proto.send_oob_mc(pkt->Data()); - } + if (!proto.network_online()) + return false; + auto pkt = pktfty->make_packet(PLR_BROADCAST, PLR_MASTER); + proto.send_oob_mc(pkt->Data()); + return true; } template diff --git a/Source/dvlnet/cdwrap.h b/Source/dvlnet/cdwrap.h index bb3a5445c..73ae234ee 100644 --- a/Source/dvlnet/cdwrap.h +++ b/Source/dvlnet/cdwrap.h @@ -40,7 +40,7 @@ public: virtual bool SNetGetTurnsInTransit(uint32_t *turns); virtual void setup_gameinfo(buffer_t info); virtual std::string make_default_gamename(); - virtual void send_info_request(); + virtual bool send_info_request(); virtual void clear_gamelist(); virtual std::vector get_gamelist(); virtual void setup_password(std::string pw); @@ -175,9 +175,9 @@ std::string cdwrap::make_default_gamename() } template -void cdwrap::send_info_request() +bool cdwrap::send_info_request() { - dvlnet_wrap->send_info_request(); + return dvlnet_wrap->send_info_request(); } template diff --git a/Source/storm/storm_net.cpp b/Source/storm/storm_net.cpp index 6e7030cbf..b5037e7e6 100644 --- a/Source/storm/storm_net.cpp +++ b/Source/storm/storm_net.cpp @@ -234,9 +234,9 @@ bool SNetSetBasePlayer(int /*unused*/) return true; } -void DvlNet_SendInfoRequest() +bool DvlNet_SendInfoRequest() { - dvlnet_inst->send_info_request(); + return dvlnet_inst->send_info_request(); } void DvlNet_ClearGamelist() diff --git a/Source/storm/storm_net.hpp b/Source/storm/storm_net.hpp index 7625cc6d2..892abf051 100644 --- a/Source/storm/storm_net.hpp +++ b/Source/storm/storm_net.hpp @@ -165,7 +165,7 @@ bool SNetSetBasePlayer(int); bool SNetInitializeProvider(uint32_t provider, struct GameData *gameData); void SNetGetProviderCaps(struct _SNETCAPS *); -void DvlNet_SendInfoRequest(); +bool DvlNet_SendInfoRequest(); void DvlNet_ClearGamelist(); std::vector DvlNet_GetGamelist(); void DvlNet_SetPassword(std::string pw);