feat(multiplayer): save token.
This commit is contained in:
@@ -158,6 +158,9 @@ public final class Config implements Cloneable, Observable {
|
||||
@SerializedName("logLines")
|
||||
private IntegerProperty logLines = new SimpleIntegerProperty(100);
|
||||
|
||||
@SerializedName("multiplayerToken")
|
||||
private StringProperty multiplayerToken = new SimpleStringProperty();
|
||||
|
||||
@SerializedName("authlibInjectorServers")
|
||||
private ObservableList<AuthlibInjectorServer> authlibInjectorServers = FXCollections.observableArrayList(server -> new Observable[] { server });
|
||||
|
||||
@@ -580,4 +583,16 @@ public final class Config implements Cloneable, Observable {
|
||||
public StringProperty preferredLoginTypeProperty() {
|
||||
return preferredLoginType;
|
||||
}
|
||||
|
||||
public String getMultiplayerToken() {
|
||||
return multiplayerToken.get();
|
||||
}
|
||||
|
||||
public StringProperty multiplayerTokenProperty() {
|
||||
return multiplayerToken;
|
||||
}
|
||||
|
||||
public void setMultiplayerToken(String multiplayerToken) {
|
||||
this.multiplayerToken.set(multiplayerToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,6 @@
|
||||
*/
|
||||
package org.jackhuang.hmcl.ui.multiplayer;
|
||||
|
||||
import com.jfoenix.controls.JFXTextField;
|
||||
import javafx.beans.property.SimpleStringProperty;
|
||||
import javafx.beans.property.StringProperty;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ProgressIndicator;
|
||||
import javafx.scene.layout.ColumnConstraints;
|
||||
@@ -38,13 +35,12 @@ import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||
|
||||
public class CreateMultiplayerRoomDialog extends DialogPane implements DialogAware {
|
||||
|
||||
private final StringProperty token = new SimpleStringProperty();
|
||||
private final FutureCallback<CreationResult> callback;
|
||||
private final FutureCallback<LocalServerDetector.PingResponse> callback;
|
||||
private final LocalServerDetector lanServerDetectorThread;
|
||||
|
||||
private LocalServerDetector.PingResponse server;
|
||||
|
||||
CreateMultiplayerRoomDialog(FutureCallback<CreationResult> callback) {
|
||||
CreateMultiplayerRoomDialog(FutureCallback<LocalServerDetector.PingResponse> callback) {
|
||||
this.callback = callback;
|
||||
|
||||
setTitle(i18n("multiplayer.session.create"));
|
||||
@@ -63,21 +59,16 @@ public class CreateMultiplayerRoomDialog extends DialogPane implements DialogAwa
|
||||
|
||||
body.addRow(0, hintPane);
|
||||
|
||||
JFXTextField tokenField = new JFXTextField();
|
||||
tokenField.textProperty().bindBidirectional(token);
|
||||
tokenField.setPromptText(i18n("multiplayer.session.create.token.prompt"));
|
||||
body.addRow(1, new Label(i18n("multiplayer.session.create.token")), tokenField);
|
||||
|
||||
Label nameField = new Label();
|
||||
nameField.setText(Optional.ofNullable(Accounts.getSelectedAccount())
|
||||
.map(Account::getUsername)
|
||||
.map(username -> i18n("multiplayer.session.name.format", username))
|
||||
.orElse(""));
|
||||
body.addRow(2, new Label(i18n("multiplayer.session.create.name")), nameField);
|
||||
body.addRow(1, new Label(i18n("multiplayer.session.create.name")), nameField);
|
||||
|
||||
Label portLabel = new Label(i18n("multiplayer.nat.testing"));
|
||||
portLabel.setText(i18n("multiplayer.nat.testing"));
|
||||
body.addRow(3, new Label(i18n("multiplayer.session.create.port")), portLabel);
|
||||
body.addRow(2, new Label(i18n("multiplayer.session.create.port")), portLabel);
|
||||
|
||||
setValid(false);
|
||||
|
||||
@@ -111,7 +102,7 @@ public class CreateMultiplayerRoomDialog extends DialogPane implements DialogAwa
|
||||
protected void onAccept() {
|
||||
setLoading();
|
||||
|
||||
callback.call(new CreationResult(token.get(), Objects.requireNonNull(server)), () -> {
|
||||
callback.call(Objects.requireNonNull(server), () -> {
|
||||
runInFX(this::onSuccess);
|
||||
}, msg -> {
|
||||
runInFX(() -> onFailure(msg));
|
||||
@@ -130,21 +121,4 @@ public class CreateMultiplayerRoomDialog extends DialogPane implements DialogAwa
|
||||
lanServerDetectorThread.interrupt();
|
||||
}
|
||||
|
||||
public static class CreationResult {
|
||||
private final String token;
|
||||
private final LocalServerDetector.PingResponse server;
|
||||
|
||||
public CreationResult(String token, LocalServerDetector.PingResponse server) {
|
||||
this.token = token;
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public LocalServerDetector.PingResponse getServer() {
|
||||
return server;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ import java.util.concurrent.CancellationException;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
||||
import static org.jackhuang.hmcl.ui.FXUtils.runInFX;
|
||||
import static org.jackhuang.hmcl.util.Logging.LOG;
|
||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||
@@ -170,9 +171,9 @@ public class MultiplayerPage extends Control implements DecoratorPage, PageAware
|
||||
}
|
||||
|
||||
Controllers.dialog(new CreateMultiplayerRoomDialog((result, resolve, reject) -> {
|
||||
int port = result.getServer().getAd();
|
||||
int port = result.getAd();
|
||||
try {
|
||||
initCatoSession(MultiplayerManager.createSession(result.getToken(), result.getServer().getMotd(), port));
|
||||
initCatoSession(MultiplayerManager.createSession(config().getMultiplayerToken(), result.getMotd(), port));
|
||||
} catch (Exception e) {
|
||||
LOG.log(Level.WARNING, "Failed to create session", e);
|
||||
reject.accept(i18n("multiplayer.session.create.error"));
|
||||
@@ -191,8 +192,7 @@ public class MultiplayerPage extends Control implements DecoratorPage, PageAware
|
||||
}
|
||||
|
||||
Controllers.prompt(new PromptDialogPane.Builder(i18n("multiplayer.session.join"), (result, resolve, reject) -> {
|
||||
String token = ((PromptDialogPane.Builder.StringQuestion) result.get(1)).getValue();
|
||||
String invitationCode = ((PromptDialogPane.Builder.StringQuestion) result.get(2)).getValue();
|
||||
String invitationCode = ((PromptDialogPane.Builder.StringQuestion) result.get(1)).getValue();
|
||||
MultiplayerManager.Invitation invitation;
|
||||
try {
|
||||
invitation = MultiplayerManager.parseInvitationCode(invitationCode);
|
||||
@@ -211,7 +211,7 @@ public class MultiplayerPage extends Control implements DecoratorPage, PageAware
|
||||
}
|
||||
|
||||
try {
|
||||
MultiplayerManager.joinSession(token, invitation.getVersion(), invitation.getSessionName(), invitation.getId(), invitation.getGamePort(), localPort)
|
||||
MultiplayerManager.joinSession(config().getMultiplayerToken(), invitation.getVersion(), invitation.getSessionName(), invitation.getId(), invitation.getGamePort(), localPort)
|
||||
.thenAcceptAsync(session -> {
|
||||
initCatoSession(session);
|
||||
|
||||
@@ -235,7 +235,6 @@ public class MultiplayerPage extends Control implements DecoratorPage, PageAware
|
||||
}
|
||||
})
|
||||
.addQuestion(new PromptDialogPane.Builder.HintQuestion(i18n("multiplayer.session.join.hint")))
|
||||
.addQuestion(new PromptDialogPane.Builder.StringQuestion(i18n("multiplayer.session.create.token"), "").setPromptText(i18n("multiplayer.session.create.token.prompt")))
|
||||
.addQuestion(new PromptDialogPane.Builder.StringQuestion(i18n("multiplayer.session.join.invitation_code"), "", new RequiredValidator())));
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package org.jackhuang.hmcl.ui.multiplayer;
|
||||
|
||||
import com.jfoenix.controls.JFXButton;
|
||||
import com.jfoenix.controls.JFXTextField;
|
||||
import de.javawi.jstun.test.DiscoveryInfo;
|
||||
import javafx.beans.binding.Bindings;
|
||||
import javafx.geometry.Insets;
|
||||
@@ -38,6 +39,7 @@ import org.jackhuang.hmcl.ui.construct.*;
|
||||
import org.jackhuang.hmcl.ui.versions.Versions;
|
||||
import org.jackhuang.hmcl.util.javafx.BindingMapping;
|
||||
|
||||
import static org.jackhuang.hmcl.setting.ConfigHolder.config;
|
||||
import static org.jackhuang.hmcl.ui.versions.VersionPage.wrap;
|
||||
import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
|
||||
|
||||
@@ -231,9 +233,19 @@ public class MultiplayerPageSkin extends SkinBase<MultiplayerPage> {
|
||||
|
||||
ComponentList thanksPane = new ComponentList();
|
||||
{
|
||||
GridPane gridPane = new GridPane();
|
||||
gridPane.getColumnConstraints().setAll(new ColumnConstraints(), FXUtils.getColumnHgrowing());
|
||||
gridPane.setVgap(8);
|
||||
gridPane.setHgap(16);
|
||||
|
||||
JFXTextField tokenField = new JFXTextField();
|
||||
tokenField.textProperty().bindBidirectional(config().multiplayerTokenProperty());
|
||||
tokenField.setPromptText(i18n("multiplayer.session.create.token.prompt"));
|
||||
gridPane.addRow(0, new Label(i18n("multiplayer.session.create.token")), tokenField);
|
||||
|
||||
Label label = new Label(i18n("multiplayer.powered_by"));
|
||||
|
||||
thanksPane.getContent().add(label);
|
||||
thanksPane.getContent().addAll(gridPane, label);
|
||||
}
|
||||
|
||||
content.getChildren().setAll(
|
||||
|
||||
Reference in New Issue
Block a user