From d1d26ad0f01a4d54c6703e9e0aa5c6a3ca81c1c4 Mon Sep 17 00:00:00 2001 From: Ayndpa Date: Tue, 18 Nov 2025 21:45:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Steam=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9B=B4=E6=96=B0=E5=8A=9F=E8=83=BD=E4=BB=A5?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BB=B6=E8=BF=9F=E5=92=8C=E4=B8=AD=E7=BB=A7?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- online_game_tool.cpp | 3 +++ steamnet/steam_message_handler.cpp | 3 +++ steamnet/steam_networking_manager.cpp | 31 +++++++++++---------------- steamnet/steam_networking_manager.h | 11 ++-------- 4 files changed, 20 insertions(+), 28 deletions(-) diff --git a/online_game_tool.cpp b/online_game_tool.cpp index 2b987ee..0ec33ab 100644 --- a/online_game_tool.cpp +++ b/online_game_tool.cpp @@ -113,6 +113,9 @@ int main() { // Run Steam callbacks SteamAPI_RunCallbacks(); + // Update Steam networking info + steamManager.update(); + // Start ImGui frame ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); diff --git a/steamnet/steam_message_handler.cpp b/steamnet/steam_message_handler.cpp index fafb91f..25e0987 100644 --- a/steamnet/steam_message_handler.cpp +++ b/steamnet/steam_message_handler.cpp @@ -101,6 +101,9 @@ void SteamMessageHandler::pollMessages() { } } // Send to corresponding TCP client if exists (for host) + if (clientMap_.count(conn)) { + clientMap_[conn]->send((const char*)pIncomingMsg->m_pData, pIncomingMsg->m_cbSize); + } } pIncomingMsg->Release(); } diff --git a/steamnet/steam_networking_manager.cpp b/steamnet/steam_networking_manager.cpp index 6da3789..5480b81 100644 --- a/steamnet/steam_networking_manager.cpp +++ b/steamnet/steam_networking_manager.cpp @@ -117,7 +117,7 @@ bool SteamNetworkingManager::initialize() { std::cout << "Cleared Rich Presence on startup" << std::endl; // Check if callbacks are registered - std::cout << "Steam API initialized, callbacks should be registered" << std::endl; + std::cout << "Steam API initialized" << std::endl; // Get friends list int friendCount = SteamFriends()->GetFriendCount(k_EFriendFlagAll); @@ -224,24 +224,17 @@ bool SteamNetworkingManager::joinHost(uint64 hostID) { } } -void SteamNetworkingManager::setMessageHandlerDependencies(boost::asio::io_context& io_context, std::map>& clientMap, std::mutex& clientMutex, std::unique_ptr& server, int& localPort) { - io_context_ = &io_context; - clientMap_ = &clientMap; - clientMutex_ = &clientMutex; - server_ = &server; - localPort_ = &localPort; - messageHandler_ = new SteamMessageHandler(io_context, m_pInterface, connections, clientMap, clientMutex, connectionsMutex, server, g_isHost, localPort); -} - -void SteamNetworkingManager::startMessageHandler() { - if (messageHandler_) { - messageHandler_->start(); - } -} - -void SteamNetworkingManager::stopMessageHandler() { - if (messageHandler_) { - messageHandler_->stop(); +void SteamNetworkingManager::update() { + std::lock_guard lock(connectionsMutex); + for (auto& pair : userMap) { + HSteamNetConnection conn = pair.first; + UserInfo& userInfo = pair.second; + SteamNetConnectionInfo_t info; + SteamNetConnectionRealTimeStatus_t status; + if (m_pInterface->GetConnectionInfo(conn, &info) && m_pInterface->GetConnectionRealTimeStatus(conn, &status, 0, nullptr)) { + userInfo.ping = status.m_nPing; + userInfo.isRelay = (info.m_idPOPRelay != 0); + } } } diff --git a/steamnet/steam_networking_manager.h b/steamnet/steam_networking_manager.h index a154a30..fd9b344 100644 --- a/steamnet/steam_networking_manager.h +++ b/steamnet/steam_networking_manager.h @@ -81,15 +81,8 @@ public: HSteamNetConnection getConnection() const { return g_hConnection; } ISteamNetworkingSockets* getInterface() const { return m_pInterface; } - void setMessageHandlerDependencies(boost::asio::io_context& io_context, std::map>& clientMap, std::mutex& clientMutex, std::unique_ptr& server, int& localPort); - - // Message handler - void startMessageHandler(); - void stopMessageHandler(); - - // For callbacks - void setHostSteamID(CSteamID id) { g_hostSteamID = id; } - CSteamID getHostSteamID() const { return g_hostSteamID; } + // Update user info (ping, relay status) + void update(); friend class SteamFriendsCallbacks; friend class SteamMatchmakingCallbacks;