summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorTechjar <tecknojar@gmail.com>2018-07-01 22:52:43 -0400
committerTechjar <tecknojar@gmail.com>2018-07-05 17:15:19 -0400
commita29cdb5713a681fb2fbbf8ca9017f3ea03e53309 (patch)
tree17b7bbc08e2b923cba81a007c25501b549d2c9d5 /Source/Core
parentf5730e1636458db654b62e60a7ec4ad5f85686ba (diff)
Improve NetPlay connection error handling
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/NetPlayClient.cpp22
-rw-r--r--Source/Core/Core/NetPlayClient.h1
-rw-r--r--Source/Core/Core/NetPlayServer.cpp2
-rw-r--r--Source/Core/DolphinQt2/MainWindow.cpp2
-rw-r--r--Source/Core/DolphinQt2/NetPlay/NetPlayDialog.cpp8
-rw-r--r--Source/Core/DolphinQt2/NetPlay/NetPlayDialog.h1
6 files changed, 24 insertions, 12 deletions
diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp
index 6b2c226f88..c225311b95 100644
--- a/Source/Core/Core/NetPlayClient.cpp
+++ b/Source/Core/Core/NetPlayClient.cpp
@@ -93,7 +93,8 @@ NetPlayClient::NetPlayClient(const std::string& address, const u16 port, NetPlay
if (m_client == nullptr)
{
- PanicAlertT("Couldn't Create Client");
+ m_dialog->OnConnectionError(_trans("Could not create client."));
+ return;
}
ENetAddress addr;
@@ -104,7 +105,8 @@ NetPlayClient::NetPlayClient(const std::string& address, const u16 port, NetPlay
if (m_server == nullptr)
{
- PanicAlertT("Couldn't create peer.");
+ m_dialog->OnConnectionError(_trans("Could not create peer."));
+ return;
}
ENetEvent netEvent;
@@ -119,14 +121,15 @@ NetPlayClient::NetPlayClient(const std::string& address, const u16 port, NetPlay
}
else
{
- PanicAlertT("Failed to Connect!");
+ m_dialog->OnConnectionError(_trans("Could not communicate with host."));
}
}
else
{
if (address.size() > NETPLAY_CODE_SIZE)
{
- PanicAlertT("Host code size is to large.\nPlease recheck that you have the correct code");
+ m_dialog->OnConnectionError(
+ _trans("Host code size is too large.\nPlease recheck that you have the correct code."));
return;
}
@@ -174,7 +177,7 @@ NetPlayClient::NetPlayClient(const std::string& address, const u16 port, NetPlay
if (connect_timer.GetTimeElapsed() > 5000)
break;
}
- PanicAlertT("Failed To Connect!");
+ m_dialog->OnConnectionError(_trans("Could not communicate with host."));
}
}
@@ -209,16 +212,17 @@ bool NetPlayClient::Connect()
switch (error)
{
case CON_ERR_SERVER_FULL:
- PanicAlertT("The server is full!");
+ m_dialog->OnConnectionError(_trans("The server is full."));
break;
case CON_ERR_VERSION_MISMATCH:
- PanicAlertT("The server and client's NetPlay versions are incompatible!");
+ m_dialog->OnConnectionError(
+ _trans("The server and client's NetPlay versions are incompatible."));
break;
case CON_ERR_GAME_RUNNING:
- PanicAlertT("The server responded: the game is currently running!");
+ m_dialog->OnConnectionError(_trans("The game is currently running."));
break;
default:
- PanicAlertT("The server sent an unknown error message!");
+ m_dialog->OnConnectionError(_trans("The server sent an unknown error message."));
break;
}
diff --git a/Source/Core/Core/NetPlayClient.h b/Source/Core/Core/NetPlayClient.h
index 2373f72084..10ad0c4497 100644
--- a/Source/Core/Core/NetPlayClient.h
+++ b/Source/Core/Core/NetPlayClient.h
@@ -34,6 +34,7 @@ public:
virtual void OnPadBufferChanged(u32 buffer) = 0;
virtual void OnDesync(u32 frame, const std::string& player) = 0;
virtual void OnConnectionLost() = 0;
+ virtual void OnConnectionError(const std::string& message) = 0;
virtual void OnTraversalError(TraversalClient::FailureReason error) = 0;
virtual bool IsRecording() = 0;
virtual std::string FindGame(const std::string& game) = 0;
diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp
index 416b358449..0d5d190df8 100644
--- a/Source/Core/Core/NetPlayServer.cpp
+++ b/Source/Core/Core/NetPlayServer.cpp
@@ -173,7 +173,7 @@ void NetPlayServer::ThreadFunc()
delete (PlayerId*)netEvent.peer->data;
netEvent.peer->data = nullptr;
}
- enet_peer_disconnect(accept_peer, 0);
+ enet_peer_disconnect_later(accept_peer, 0);
}
}
break;
diff --git a/Source/Core/DolphinQt2/MainWindow.cpp b/Source/Core/DolphinQt2/MainWindow.cpp
index 762ef125f7..3a759dfb40 100644
--- a/Source/Core/DolphinQt2/MainWindow.cpp
+++ b/Source/Core/DolphinQt2/MainWindow.cpp
@@ -1085,8 +1085,6 @@ bool MainWindow::NetPlayJoin()
if (!Settings::Instance().GetNetPlayClient()->IsConnected())
{
- QMessageBox::critical(nullptr, QObject::tr("Error"),
- QObject::tr("Failed to connect to server"));
NetPlayQuit();
return false;
}
diff --git a/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.cpp b/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.cpp
index 693e9c77d4..4b8db43d93 100644
--- a/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.cpp
+++ b/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.cpp
@@ -558,6 +558,14 @@ void NetPlayDialog::OnConnectionLost()
DisplayMessage(tr("Lost connection to NetPlay server..."), "red");
}
+void NetPlayDialog::OnConnectionError(const std::string& message)
+{
+ QueueOnObject(this, [this, message] {
+ QMessageBox::critical(this, tr("Error"),
+ tr("Failed to connect to server: %1").arg(tr(message.c_str())));
+ });
+}
+
void NetPlayDialog::OnTraversalError(TraversalClient::FailureReason error)
{
QueueOnObject(this, [this, error] {
diff --git a/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.h b/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.h
index 2f121c88f0..811303ede3 100644
--- a/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.h
+++ b/Source/Core/DolphinQt2/NetPlay/NetPlayDialog.h
@@ -49,6 +49,7 @@ public:
void OnPadBufferChanged(u32 buffer) override;
void OnDesync(u32 frame, const std::string& player) override;
void OnConnectionLost() override;
+ void OnConnectionError(const std::string& message) override;
void OnTraversalError(TraversalClient::FailureReason error) override;
bool IsRecording() override;
std::string FindGame(const std::string& game) override;