diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp index 07e13867223..5c6d72fc197 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp @@ -441,7 +441,7 @@ class WebSocketMessage_Social_FriendChatMessage_Incoming : public WebSocketMessa int64_t source_user_id; int64_t target_user_id; std::string message; - + NLOHMANN_DEFINE_TYPE_INTRUSIVE(WebSocketMessage_Social_FriendChatMessage_Incoming, msg_id, source_user_id, target_user_id, message) }; @@ -837,6 +837,13 @@ void WebSocket::Tick() if (m_bReconnecting) { NetworkLog(ELogVerbosity::LOG_RELEASE, "[WebSocket] Re-Connected"); + + NGMP_OnlineServices_LobbyInterface* pLobbyInterface = NGMP_OnlineServicesManager::GetInterface(); + if (pLobbyInterface != nullptr && pLobbyInterface->IsInLobby()) + { + NetworkLog(ELogVerbosity::LOG_RELEASE, "[WebSocket] Reconnected while in a lobby, refreshing it"); + pLobbyInterface->UpdateRoomDataCache(nullptr); + } } else { @@ -927,7 +934,7 @@ void WebSocket::Tick() m_vecWSPartialBuffer.clear(); return; } - + // SECURITY FIX: Store old size BEFORE resize to avoid off-by-one error in memcpy size_t oldSize = m_vecWSPartialBuffer.size(); m_vecWSPartialBuffer.resize(oldSize + rlen);