From 5fef22fc5210d6dcdfab4a686c2834cc673222b2 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Fri, 20 Apr 2018 00:14:44 -0600 Subject: [PATCH] Frontend: Prevent connecting to another room when already joining --- src/citra_qt/multiplayer/direct_connect.cpp | 8 +++++++- src/citra_qt/multiplayer/host_room.cpp | 4 +++- src/citra_qt/multiplayer/lobby.cpp | 22 ++++++++++----------- src/citra_qt/multiplayer/lobby.h | 1 - 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/citra_qt/multiplayer/direct_connect.cpp b/src/citra_qt/multiplayer/direct_connect.cpp index a9b64c98c..5cfd3ced8 100644 --- a/src/citra_qt/multiplayer/direct_connect.cpp +++ b/src/citra_qt/multiplayer/direct_connect.cpp @@ -51,8 +51,14 @@ void DirectConnectWindow::Connect() { return; } if (const auto member = Network::GetRoomMember().lock()) { - if (member->IsConnected() && !NetworkMessage::WarnDisconnect()) { + // Prevent the user from trying to join a room while they are already joining. + if (member->GetState() == Network::RoomMember::State::Joining) { return; + } else if (member->GetState() == Network::RoomMember::State::Joined) { + // And ask if they want to leave the room if they are already in one. + if (!NetworkMessage::WarnDisconnect()) { + return; + } } } switch (static_cast(ui->connection_type->currentIndex())) { diff --git a/src/citra_qt/multiplayer/host_room.cpp b/src/citra_qt/multiplayer/host_room.cpp index a57f31052..99bd83545 100644 --- a/src/citra_qt/multiplayer/host_room.cpp +++ b/src/citra_qt/multiplayer/host_room.cpp @@ -74,7 +74,9 @@ void HostRoomWindow::Host() { return; } if (auto member = Network::GetRoomMember().lock()) { - if (member->IsConnected()) { + if (member->GetState() == Network::RoomMember::State::Joining) { + return; + } else if (member->GetState() == Network::RoomMember::State::Joined) { auto parent = static_cast(parentWidget()); if (!parent->OnCloseRoom()) { close(); diff --git a/src/citra_qt/multiplayer/lobby.cpp b/src/citra_qt/multiplayer/lobby.cpp index 0b58091cb..6077de6d5 100644 --- a/src/citra_qt/multiplayer/lobby.cpp +++ b/src/citra_qt/multiplayer/lobby.cpp @@ -26,7 +26,6 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, // setup the watcher for background connections watcher = new QFutureWatcher; - connect(watcher, &QFutureWatcher::finished, [&] { joining = false; }); model = new QStandardItemModel(ui->room_list); proxy = new LobbyFilterProxyModel(this, game_list); @@ -51,7 +50,6 @@ Lobby::Lobby(QWidget* parent, QStandardItemModel* list, ui->nickname->setText(UISettings::values.nickname); // UI Buttons - MultiplayerState* p = reinterpret_cast(parent); connect(ui->refresh_list, &QPushButton::pressed, this, &Lobby::RefreshLobby); connect(ui->games_owned, &QCheckBox::stateChanged, proxy, &LobbyFilterProxyModel::SetFilterOwned); @@ -84,10 +82,17 @@ void Lobby::OnExpandRoom(const QModelIndex& index) { } void Lobby::OnJoinRoom(const QModelIndex& source) { - if (joining) { - return; + if (const auto member = Network::GetRoomMember().lock()) { + // Prevent the user from trying to join a room while they are already joining. + if (member->GetState() == Network::RoomMember::State::Joining) { + return; + } else if (member->GetState() == Network::RoomMember::State::Joined) { + // And ask if they want to leave the room if they are already in one. + if (!NetworkMessage::WarnDisconnect()) { + return; + } + } } - joining = true; QModelIndex index = source; // If the user double clicks on a child row (aka the player list) then use the parent instead if (source.parent() != QModelIndex()) { @@ -97,13 +102,6 @@ void Lobby::OnJoinRoom(const QModelIndex& source) { NetworkMessage::ShowError(NetworkMessage::USERNAME_NOT_VALID); return; } - if (const auto member = Network::GetRoomMember().lock()) { - if (member->IsConnected()) { - if (!NetworkMessage::WarnDisconnect()) { - return; - } - } - } // Get a password to pass if the room is password protected QModelIndex password_index = proxy->index(index.row(), Column::ROOM_NAME); diff --git a/src/citra_qt/multiplayer/lobby.h b/src/citra_qt/multiplayer/lobby.h index 783225737..e0f50a26f 100644 --- a/src/citra_qt/multiplayer/lobby.h +++ b/src/citra_qt/multiplayer/lobby.h @@ -89,7 +89,6 @@ private: std::unique_ptr ui; QFutureWatcher* watcher; Validation validation; - bool joining = false; }; /**