diff options
| author | spycrab <spycrab@users.noreply.github.com> | 2019-04-12 14:21:42 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-12 14:21:42 +0200 |
| commit | 2a1dee4dce2e0e671d3a90f33164fc015aece7a0 (patch) | |
| tree | 006dda648cd317e944d11881cc0fc10be25deee7 /Source | |
| parent | f2e3f69d34317c7f4fc1fe4e94d470344dafd1f7 (diff) | |
| parent | 8b6bb39e82b66c0faa7ac29512b3f68167874404 (diff) | |
Merge pull request #7976 from spycrab/netplay_index_feedback
Qt/NetPlay: Show feedback for index adding
Diffstat (limited to 'Source')
| -rw-r--r-- | Source/Core/Core/NetPlayClient.h | 3 | ||||
| -rw-r--r-- | Source/Core/Core/NetPlayServer.cpp | 11 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp | 13 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/NetPlay/NetPlayDialog.h | 3 | ||||
| -rw-r--r-- | Source/Core/UICommon/NetPlayIndex.cpp | 14 | ||||
| -rw-r--r-- | Source/Core/UICommon/NetPlayIndex.h | 7 |
6 files changed, 50 insertions, 1 deletions
diff --git a/Source/Core/Core/NetPlayClient.h b/Source/Core/Core/NetPlayClient.h index 3afaadd815..7ece1a5a68 100644 --- a/Source/Core/Core/NetPlayClient.h +++ b/Source/Core/Core/NetPlayClient.h @@ -64,6 +64,9 @@ public: virtual void SetMD5Result(int pid, const std::string& result) = 0; virtual void AbortMD5() = 0; + virtual void OnIndexAdded(bool success, std::string error) = 0; + virtual void OnIndexRefreshFailed(std::string error) = 0; + virtual void ShowChunkedProgressDialog(const std::string& title, u64 data_size, const std::vector<int>& players) = 0; virtual void HideChunkedProgressDialog() = 0; diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index 151cf2c194..0e111aa088 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -183,6 +183,9 @@ void NetPlayServer::SetupIndex() if (m_traversal_client) { + if (m_traversal_client->GetState() != TraversalClient::Connected) + return; + session.server_id = std::string(g_TraversalClient->GetHostID().data(), 8); } else @@ -201,7 +204,13 @@ void NetPlayServer::SetupIndex() session.EncryptID(Config::Get(Config::NETPLAY_INDEX_PASSWORD)); - m_index.Add(session); + if (m_dialog != nullptr) + m_dialog->OnIndexAdded(m_index.Add(session), m_index.GetLastError()); + + m_index.SetErrorCallback([this] { + if (m_dialog != nullptr) + m_dialog->OnIndexRefreshFailed(m_index.GetLastError()); + }); } // called from ---NETPLAY--- thread diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp index 09fa19e850..5b0eebc9d4 100644 --- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp +++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp @@ -393,6 +393,19 @@ void NetPlayDialog::OnChat() }); } +void NetPlayDialog::OnIndexAdded(bool success, const std::string error) +{ + DisplayMessage(success ? tr("Successfully added to the NetPlay index") : + tr("Failed to add this session to the NetPlay index: %1") + .arg(QString::fromStdString(error)), + success ? "green" : "red"); +} + +void NetPlayDialog::OnIndexRefreshFailed(const std::string error) +{ + DisplayMessage(QString::fromStdString(error), "red"); +} + void NetPlayDialog::OnStart() { if (!Settings::Instance().GetNetPlayClient()->DoAllPlayersHaveGame()) diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h index e6d601afaa..39c0573340 100644 --- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h +++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h @@ -60,6 +60,9 @@ public: void OnGameStartAborted() override; void OnGolferChanged(bool is_golfer, const std::string& golfer_name) override; + void OnIndexAdded(bool success, const std::string error) override; + void OnIndexRefreshFailed(const std::string error) override; + bool IsRecording() override; std::string FindGame(const std::string& game) override; std::shared_ptr<const UICommon::GameFile> FindGameFile(const std::string& game) override; diff --git a/Source/Core/UICommon/NetPlayIndex.cpp b/Source/Core/UICommon/NetPlayIndex.cpp index 9915bb311d..c6ab872b4e 100644 --- a/Source/Core/UICommon/NetPlayIndex.cpp +++ b/Source/Core/UICommon/NetPlayIndex.cpp @@ -142,6 +142,8 @@ void NetPlayIndex::NotificationLoop() if (!json) { m_last_error = "BAD_JSON"; + m_secret.clear(); + m_error_callback(); return; } @@ -150,6 +152,8 @@ void NetPlayIndex::NotificationLoop() if (status != "OK") { m_last_error = std::move(status); + m_secret.clear(); + m_error_callback(); return; } } @@ -323,3 +327,13 @@ const std::string& NetPlayIndex::GetLastError() const { return m_last_error; } + +bool NetPlayIndex::HasActiveSession() const +{ + return !m_secret.empty(); +} + +void NetPlayIndex::SetErrorCallback(std::function<void()> function) +{ + m_error_callback = function; +} diff --git a/Source/Core/UICommon/NetPlayIndex.h b/Source/Core/UICommon/NetPlayIndex.h index b892d42a48..f451301152 100644 --- a/Source/Core/UICommon/NetPlayIndex.h +++ b/Source/Core/UICommon/NetPlayIndex.h @@ -4,6 +4,7 @@ #pragma once +#include <functional> #include <map> #include <optional> #include <string> @@ -46,12 +47,16 @@ public: bool Add(NetPlaySession session); void Remove(); + bool HasActiveSession() const; + void SetPlayerCount(int player_count); void SetInGame(bool in_game); void SetGame(std::string game); const std::string& GetLastError() const; + void SetErrorCallback(std::function<void()> callback); + private: void NotificationLoop(); @@ -64,4 +69,6 @@ private: std::thread m_session_thread; Common::Event m_session_thread_exit_event; + + std::function<void()> m_error_callback = nullptr; }; |
