diff --git a/online_game_tool.cpp b/online_game_tool.cpp index e5bd347..dc4014d 100644 --- a/online_game_tool.cpp +++ b/online_game_tool.cpp @@ -209,10 +209,11 @@ int main() { ImGui::Begin("房间状态"); ImGui::Text("用户列表:"); - if (ImGui::BeginTable("UserTable", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) + if (ImGui::BeginTable("UserTable", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { ImGui::TableSetupColumn("名称"); ImGui::TableSetupColumn("延迟 (ms)"); + ImGui::TableSetupColumn("连接类型"); ImGui::TableHeadersRow(); { std::vector members = roomManager.getLobbyMembers(); @@ -227,10 +228,13 @@ int main() if (memberID == mySteamID) { ImGui::Text("-"); + ImGui::TableNextColumn(); + ImGui::Text("-"); } else { int ping = 0; + std::string relayInfo = "N/A"; if (steamManager.isHost()) { // Find connection for this member @@ -243,6 +247,7 @@ int main() if (info.m_identityRemote.GetSteamID() == memberID) { ping = steamManager.getConnectionPing(conn); + relayInfo = steamManager.getConnectionRelayInfo(conn); break; } } @@ -252,8 +257,14 @@ int main() { // Client shows ping to host ping = steamManager.getHostPing(); + if (steamManager.getConnection() != k_HSteamNetConnection_Invalid) + { + relayInfo = steamManager.getConnectionRelayInfo(steamManager.getConnection()); + } } ImGui::Text("%d", ping); + ImGui::TableNextColumn(); + ImGui::Text("%s", relayInfo.c_str()); } } } diff --git a/steam/steam_networking_manager.cpp b/steam/steam_networking_manager.cpp index 0b7f5c6..fbd84cf 100644 --- a/steam/steam_networking_manager.cpp +++ b/steam/steam_networking_manager.cpp @@ -211,6 +211,28 @@ int SteamNetworkingManager::getConnectionPing(HSteamNetConnection conn) const return 0; } +std::string SteamNetworkingManager::getConnectionRelayInfo(HSteamNetConnection conn) const +{ + SteamNetConnectionInfo_t info; + if (m_pInterface->GetConnectionInfo(conn, &info)) + { + // Check if connection is using relay + if (info.m_nFlags & k_nSteamNetworkConnectionInfoFlags_Relayed) + { + return "中继"; + } + else if (info.m_nFlags & k_nSteamNetworkConnectionInfoFlags_Fast) + { + return "直连"; + } + else + { + return "未知"; + } + } + return "N/A"; +} + void SteamNetworkingManager::handleConnectionStatusChanged(SteamNetConnectionStatusChangedCallback_t *pInfo) { std::lock_guard lock(connectionsMutex); diff --git a/steam/steam_networking_manager.h b/steam/steam_networking_manager.h index 94b5eeb..e0e3a36 100644 --- a/steam/steam_networking_manager.h +++ b/steam/steam_networking_manager.h @@ -45,6 +45,7 @@ public: int getConnectionPing(HSteamNetConnection conn) const; HSteamNetConnection getConnection() const { return g_hConnection; } ISteamNetworkingSockets* getInterface() const { return m_pInterface; } + std::string getConnectionRelayInfo(HSteamNetConnection conn) const; // For SteamRoomManager access std::unique_ptr*& getServer() { return server_; }