diff options
author | vampiric_x <vampiric_x@citron-emu.org> | 2025-01-17 19:03:31 +0100 |
---|---|---|
committer | vampiric_x <vampiric_x@citron-emu.org> | 2025-01-17 19:03:31 +0100 |
commit | 913cc27e3a74640c749b25de5f5cd2f5b018be06 (patch) | |
tree | 270005ee0cf2c1cad2c7a0005462a996c491fcb6 /src/citron | |
parent | 369847897796e40cdb9eb9a467965bbdb48c7def (diff) |
feat(network): Ip input field for multiplayer room creation
Diffstat (limited to 'src/citron')
-rw-r--r-- | src/citron/multiplayer/host_room.cpp | 34 | ||||
-rw-r--r-- | src/citron/multiplayer/host_room.h | 2 | ||||
-rw-r--r-- | src/citron/multiplayer/host_room.ui | 71 |
3 files changed, 80 insertions, 27 deletions
diff --git a/src/citron/multiplayer/host_room.cpp b/src/citron/multiplayer/host_room.cpp index 7651082df..89fe5d94d 100644 --- a/src/citron/multiplayer/host_room.cpp +++ b/src/citron/multiplayer/host_room.cpp @@ -10,6 +10,10 @@ #include <QMetaType> #include <QTime> #include <QtConcurrent/QtConcurrentRun> +#include <QHostInfo> +#include <QNetworkInterface> +#include <QClipboard> +#include <QApplication> #include "common/logging/log.h" #include "common/settings.h" #include "core/core.h" @@ -53,6 +57,7 @@ HostRoomWindow::HostRoomWindow(QWidget* parent, QStandardItemModel* list, // Connect all the widgets to the appropriate events connect(ui->host, &QPushButton::clicked, this, &HostRoomWindow::Host); + connect(ui->copy_ip_button, &QPushButton::clicked, this, &HostRoomWindow::CopyIPToClipboard); // Restore the settings: ui->username->setText( @@ -76,6 +81,8 @@ HostRoomWindow::HostRoomWindow(QWidget* parent, QStandardItemModel* list, } ui->room_description->setText( QString::fromStdString(UISettings::values.multiplayer_room_description.GetValue())); + + SetLocalIPAddress(); } HostRoomWindow::~HostRoomWindow() = default; @@ -148,6 +155,7 @@ void HostRoomWindow::Host() { } } ui->host->setDisabled(true); + std::string ip_address = ui->server_address_box->text().toStdString(); const AnnounceMultiplayerRoom::GameInfo game{ .name = ui->game_list->currentData(Qt::DisplayRole).toString().toStdString(), @@ -164,7 +172,7 @@ void HostRoomWindow::Host() { if (auto room = room_network.GetRoom().lock()) { const bool created = room->Create(ui->room_name->text().toStdString(), - ui->room_description->toPlainText().toStdString(), "", port, password, + ui->room_description->toPlainText().toStdString(), ip_address, port, password, ui->max_player->value(), Settings::values.citron_username.GetValue(), game, CreateVerifyBackend(is_public), ban_list); if (!created) { @@ -216,7 +224,7 @@ void HostRoomWindow::Host() { } #endif // TODO: Check what to do with this - member->Join(ui->username->text().toStdString(), "127.0.0.1", port, 0, + member->Join(ui->username->text().toStdString(), ip_address.c_str(), port, 0, Network::NoPreferredIP, password, token); // Store settings @@ -261,3 +269,25 @@ bool ComboBoxProxyModel::lessThan(const QModelIndex& left, const QModelIndex& ri auto rightData = right.data(GameListItemPath::TitleRole).toString(); return leftData.compare(rightData) < 0; } + +void HostRoomWindow::SetLocalIPAddress() { + QString local_ip; + + foreach (const QHostAddress &address, QNetworkInterface::allAddresses()) { + if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost)) { + local_ip = address.toString(); + break; + } + } + + if (!local_ip.isEmpty()) { + ui->server_address_box->setText(local_ip); + } else { + ui->server_address_box->setPlaceholderText(tr("Enter Server Address")); + } +} + +void HostRoomWindow::CopyIPToClipboard() { + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(ui->server_address_box->text()); +} diff --git a/src/citron/multiplayer/host_room.h b/src/citron/multiplayer/host_room.h index 49208ee3f..ff4ce20f6 100644 --- a/src/citron/multiplayer/host_room.h +++ b/src/citron/multiplayer/host_room.h @@ -51,6 +51,8 @@ signals: private: void Host(); + void SetLocalIPAddress(); + void CopyIPToClipboard(); std::unique_ptr<Network::VerifyUser::Backend> CreateVerifyBackend(bool use_validation) const; std::unique_ptr<Ui::HostRoom> ui; diff --git a/src/citron/multiplayer/host_room.ui b/src/citron/multiplayer/host_room.ui index d54cf49c6..6e100ba85 100644 --- a/src/citron/multiplayer/host_room.ui +++ b/src/citron/multiplayer/host_room.ui @@ -7,13 +7,34 @@ <x>0</x> <y>0</y> <width>607</width> - <height>211</height> + <height>236</height> </rect> </property> <property name="windowTitle"> <string>Create Room</string> </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="server_address_label"> + <property name="text"> + <string>Server Address:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="server_address_box"/> + </item> + <item> + <widget class="QPushButton" name="copy_ip_button"> + <property name="text"> + <string>Copy</string> + </property> + </widget> + </item> + </layout> + </item> <item> <widget class="QWidget" name="settings" native="true"> <layout class="QHBoxLayout"> @@ -31,38 +52,38 @@ <property name="labelAlignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> - <item row="0" column="0"> + <item row="1" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Room Name</string> </property> </widget> </item> - <item row="0" column="1"> + <item row="1" column="1"> <widget class="QLineEdit" name="room_name"> <property name="maxLength"> <number>50</number> </property> </widget> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>Preferred Game</string> </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QComboBox" name="game_list"/> </item> - <item row="2" column="0"> + <item row="3" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Max Players</string> </property> </widget> </item> - <item row="2" column="1"> + <item row="3" column="1"> <widget class="QSpinBox" name="max_player"> <property name="minimum"> <number>2</number> @@ -82,9 +103,6 @@ <property name="labelAlignment"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property> - <item row="0" column="1"> - <widget class="QLineEdit" name="username"/> - </item> <item row="0" column="0"> <widget class="QLabel" name="label_6"> <property name="text"> @@ -92,6 +110,16 @@ </property> </widget> </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="username"/> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_5"> + <property name="text"> + <string>Password</string> + </property> + </widget> + </item> <item row="1" column="1"> <widget class="QLineEdit" name="password"> <property name="echoMode"> @@ -102,6 +130,13 @@ </property> </widget> </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Port</string> + </property> + </widget> + </item> <item row="2" column="1"> <widget class="QLineEdit" name="port"> <property name="inputMethodHints"> @@ -112,20 +147,6 @@ </property> </widget> </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>Password</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>Port</string> - </property> - </widget> - </item> </layout> </item> </layout> |