summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2019-04-12 14:21:42 +0200
committerGitHub <noreply@github.com>2019-04-12 14:21:42 +0200
commit2a1dee4dce2e0e671d3a90f33164fc015aece7a0 (patch)
tree006dda648cd317e944d11881cc0fc10be25deee7
parentf2e3f69d34317c7f4fc1fe4e94d470344dafd1f7 (diff)
parent8b6bb39e82b66c0faa7ac29512b3f68167874404 (diff)
Merge pull request #7976 from spycrab/netplay_index_feedback
Qt/NetPlay: Show feedback for index adding
-rw-r--r--Source/Core/Core/NetPlayClient.h3
-rw-r--r--Source/Core/Core/NetPlayServer.cpp11
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp13
-rw-r--r--Source/Core/DolphinQt/NetPlay/NetPlayDialog.h3
-rw-r--r--Source/Core/UICommon/NetPlayIndex.cpp14
-rw-r--r--Source/Core/UICommon/NetPlayIndex.h7
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;
};