Skip to content

Commit 1d40c52

Browse files
authored
Merge pull request Card-Forge#9821 from MostCromulent/serverurlscreen
Add Server URL dialog button, copy internal/external URL buttons
2 parents c1123a4 + 74a95f5 commit 1d40c52

3 files changed

Lines changed: 47 additions & 8 deletions

File tree

forge-gui-desktop/src/main/java/forge/screens/home/online/VSubmenuOnlineLobby.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import forge.deckchooser.FDeckChooser;
66
import forge.gamemodes.match.GameLobby;
77
import forge.gamemodes.net.IOnlineLobby;
8+
import forge.gamemodes.net.NetConnectUtil;
89
import forge.gamemodes.net.client.FGameClient;
910
import forge.gamemodes.net.server.FServerManager;
1011
import forge.gui.FNetOverlay;
@@ -89,7 +90,14 @@ public void populate() {
8990
lobby.getLblTitle().setText(Localizer.getInstance().getMessage("lblOnlineLobbyTitle"));
9091
pnlTitle.removeAll();
9192
pnlTitle.setOpaque(false);
92-
pnlTitle.add(lobby.getLblTitle(), "w 95%, h 40px!, gap 0 0 15px 15px, span 2");
93+
final boolean hosting = FServerManager.getInstance().isHosting();
94+
pnlTitle.add(lobby.getLblTitle(), "w 95%, h 40px!, gap 0 0 15px 15px, span " + (hosting ? "3" : "2"));
95+
if (hosting) {
96+
FButton btnServerUrl = new FButton(Localizer.getInstance().getMessage("lblServerURL"));
97+
btnServerUrl.setFont(FSkin.getRelativeFont(14));
98+
pnlTitle.add(btnServerUrl, "w 150!, h 35!, gap 10 10 0 0, align right");
99+
btnServerUrl.addActionListener(e -> NetConnectUtil.copyHostedServerUrl());
100+
}
93101
pnlTitle.add(btnStop, "gap 10 10 0 0, align right");
94102
container.add(pnlTitle,"w 80%, gap 0 0 0 0, al right, pushx");
95103

forge-gui/res/languages/en-US.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3109,9 +3109,11 @@ lblConnectingToServer=Connecting to server...
31093109
#NetConnectUtil.java
31103110
lblOnlineMultiplayerDest=This feature is under active development.\nYou are likely to find bugs.\n\n - = * H E R E B E E L D R A Z I * = -\n\nEnter the URL of the server to join.\nLeave blank to host your own server.
31113111
lblHostingPortOnN=Hosting on port {0}.
3112-
lblShareURLToMakePlayerJoinServer=Share the following URL with anyone who wishes to join your server. It has been copied to your clipboard for convenience.\n\n{0}\n\nFor internal games, use the following URL: {1}
3113-
lblForgeUnableDetermineYourExternalIP=Forge was unable to determine your external IP!\n\n{0}
3112+
lblShareURLToMakePlayerJoinServer=Share a URL below with anyone who wishes to join your server.\nThe external URL has been copied to your clipboard.\n\nExternal URL (for players outside your network):\n{0}\n\nLocal URL (for players on your network):\n{1}
3113+
lblForgeUnableDetermineYourExternalIP=Forge was unable to determine your external IP.\nThe local URL has been copied to your clipboard.\n\nLocal URL (for players on your network):\n{0}
31143114
lblServerURL=Server URL
3115+
lblCopyExternalURL=Copy External URL
3116+
lblCopyLocalURL=Copy Local URL
31153117
lblYourConnectionToHostWasInterrupted=Your connection to the host ({0}) was interrupted.
31163118
lblConnectedIPPort=Connected to {0}:{1}
31173119
#FServerManager.java

forge-gui/src/main/java/forge/gamemodes/net/NetConnectUtil.java

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import forge.util.URLValidator;
2525
import org.apache.commons.lang3.StringUtils;
2626

27+
import java.util.List;
28+
2729
import static forge.util.URLValidator.parseURL;
2830

2931
public class NetConnectUtil {
@@ -105,6 +107,7 @@ public Object sendAndWait(final IdentifiableNetEvent event) {
105107
}
106108

107109
public static void copyHostedServerUrl() {
110+
final Localizer localizer = Localizer.getInstance();
108111
String internalAddress = FServerManager.getLocalAddress();
109112
String externalAddress = FServerManager.getExternalAddress();
110113
String internalUrl = internalAddress + ":" + FModel.getNetPreferences().getPrefInt(ForgeNetPreferences.FNetPref.NET_PORT);
@@ -113,16 +116,42 @@ public static void copyHostedServerUrl() {
113116
externalUrl = externalAddress + ":" + FModel.getNetPreferences().getPrefInt(ForgeNetPreferences.FNetPref.NET_PORT);
114117
GuiBase.getInterface().copyToClipboard(externalUrl);
115118
} else {
116-
GuiBase.getInterface().copyToClipboard(internalAddress);
119+
GuiBase.getInterface().copyToClipboard(internalUrl);
117120
}
118121

119-
String message = "";
122+
String message;
123+
String title = localizer.getMessage("lblServerURL");
124+
List<String> options;
125+
int closeIndex;
126+
int localCopyIndex;
127+
120128
if (externalUrl != null) {
121-
message = Localizer.getInstance().getMessage("lblShareURLToMakePlayerJoinServer", externalUrl, internalUrl);
129+
message = localizer.getMessage("lblShareURLToMakePlayerJoinServer", externalUrl, internalUrl);
130+
options = List.of(
131+
localizer.getMessage("lblCopyExternalURL"),
132+
localizer.getMessage("lblCopyLocalURL"),
133+
localizer.getMessage("lblClose"));
134+
closeIndex = 2;
135+
localCopyIndex = 1;
122136
} else {
123-
message = Localizer.getInstance().getMessage("lblForgeUnableDetermineYourExternalIP", message + internalUrl);
137+
message = localizer.getMessage("lblForgeUnableDetermineYourExternalIP", internalUrl);
138+
options = List.of(
139+
localizer.getMessage("lblCopyLocalURL"),
140+
localizer.getMessage("lblClose"));
141+
closeIndex = 1;
142+
localCopyIndex = 0;
143+
}
144+
145+
while (true) {
146+
int result = SOptionPane.showOptionDialog(message, title, SOptionPane.INFORMATION_ICON, options, closeIndex);
147+
if (externalUrl != null && result == 0) {
148+
GuiBase.getInterface().copyToClipboard(externalUrl);
149+
} else if (result == localCopyIndex) {
150+
GuiBase.getInterface().copyToClipboard(internalUrl);
151+
} else {
152+
break;
153+
}
124154
}
125-
SOptionPane.showMessageDialog(message, Localizer.getInstance().getMessage("lblServerURL"), SOptionPane.INFORMATION_ICON);
126155
}
127156

128157
public static ChatMessage join(final String url, final IOnlineLobby onlineLobby, final IOnlineChatInterface chatInterface) {

0 commit comments

Comments
 (0)