Skip to content

Commit 08f3d96

Browse files
authored
Load the ICE servers from the new faf-icebreaker API (#3043)
1 parent 23d12b2 commit 08f3d96

File tree

18 files changed

+84
-96
lines changed

18 files changed

+84
-96
lines changed

build.gradle

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,9 @@ dependencies {
310310
implementation("com.neovisionaries:nv-i18n:1.29")
311311
implementation("com.nativelibs4java:bridj:0.7.0")
312312
implementation("org.luaj:luaj-jse:3.0.1")
313-
implementation("commons-validator:commons-validator:1.7")
313+
implementation("commons-validator:commons-validator:1.7") {
314+
exclude module: 'commons-logging'
315+
}
314316
implementation("com.github.micheljung:JJsonRpc:01a7fba5f4")
315317
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
316318
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
@@ -336,8 +338,10 @@ dependencies {
336338
implementation("org.openjfx:javafx-media:${javafxVersion}:${javafxPlatform}")
337339
implementation("com.github.1-alex98:discord-rpc:1.6.2-jna")
338340
implementation("org.controlsfx:controlsfx:11.1.2")
341+
implementation("de.codecentric.centerdevice:javafxsvg:1.3.0") {
342+
exclude module: 'commons-logging'
343+
}
339344
implementation("org.fxmisc.flowless:flowless:0.7.2")
340-
implementation("de.codecentric.centerdevice:javafxsvg:1.3.0")
341345

342346
implementation("org.javassist:javassist:3.29.2-GA")
343347

src/main/java/com/faforever/client/api/FafApiAccessor.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.springframework.util.LinkedMultiValueMap;
5353
import org.springframework.util.MultiValueMap;
5454
import org.springframework.web.reactive.function.client.WebClient;
55+
import org.springframework.web.reactive.function.client.WebClient.RequestHeadersSpec;
5556
import org.springframework.web.util.UriComponents;
5657
import org.springframework.web.util.UriComponentsBuilder;
5758
import reactor.core.publisher.Flux;
@@ -153,8 +154,18 @@ public int getMaxPageSize() {
153154
}
154155

155156
public Mono<MeResult> getMe() {
156-
return retrieveMonoWithErrorHandling(MeResult.class, apiWebClient.get().uri("/me"))
157-
.doOnNext(object -> log.trace("Retrieved {} from /me with type MeResult", object));
157+
return retrieveMonoWithErrorHandling(MeResult.class, apiWebClient.get()
158+
.uri("/me")).doOnNext(object -> log.trace("Retrieved {} from /me with type MeResult", object));
159+
}
160+
161+
public <T> Mono<T> getApiObject(String path, Class<T> clazz) {
162+
RequestHeadersSpec<?> requestSpec = apiWebClient.get().uri(path);
163+
return retrieveMonoWithErrorHandling(clazz, requestSpec).doOnNext(object -> log.trace("Retrieved {} from {} with type {}", object, path, clazz));
164+
}
165+
166+
public <T> Flux<T> getApiObjects(String path, Class<T> clazz) {
167+
RequestHeadersSpec<?> requestSpec = apiWebClient.get().uri(path);
168+
return retrieveFluxWithErrorHandling(clazz, requestSpec).doOnNext(object -> log.trace("Retrieved {} from {} with type {}", object, path, clazz));
158169
}
159170

160171
public Mono<Void> uploadFile(String endpoint, Path file, ByteCountListener listener,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.faforever.client.api;
2+
3+
public record IceServer(String id, String region) {
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.faforever.client.api;
2+
3+
import java.util.List;
4+
5+
public record IceServerResponse(List<IceServer> servers) {
6+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.faforever.client.api;
2+
3+
import com.faforever.commons.api.dto.CoturnServer;
4+
import org.jetbrains.annotations.NotNull;
5+
6+
import java.util.List;
7+
8+
public record IceSession(@NotNull String id, @NotNull List<CoturnServer> servers) {
9+
}

src/main/java/com/faforever/client/fa/relay/ice/CoturnService.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.faforever.client.fa.relay.ice;
22

33
import com.faforever.client.api.FafApiAccessor;
4-
import com.faforever.client.mapstruct.IceServerMapper;
4+
import com.faforever.client.api.IceServer;
5+
import com.faforever.client.api.IceServerResponse;
6+
import com.faforever.client.api.IceSession;
57
import com.faforever.client.preferences.ForgedAlliancePrefs;
68
import com.faforever.commons.api.dto.CoturnServer;
7-
import com.faforever.commons.api.elide.ElideNavigator;
8-
import com.faforever.commons.api.elide.ElideNavigatorOnCollection;
99
import lombok.RequiredArgsConstructor;
1010
import org.springframework.context.annotation.Lazy;
1111
import org.springframework.stereotype.Service;
@@ -21,19 +21,19 @@
2121
public class CoturnService {
2222

2323
private final FafApiAccessor fafApiAccessor;
24-
private final IceServerMapper iceServerMapper;
2524
private final ForgedAlliancePrefs forgedAlliancePrefs;
2625

27-
public CompletableFuture<List<CoturnServer>> getActiveCoturns() {
28-
ElideNavigatorOnCollection<CoturnServer> navigator = ElideNavigator.of(CoturnServer.class).collection();
29-
return fafApiAccessor.getMany(navigator)
26+
public CompletableFuture<List<IceServer>> getActiveCoturns() {
27+
return fafApiAccessor.getApiObject("/ice/server", IceServerResponse.class)
28+
.flatMapIterable(IceServerResponse::servers)
29+
.switchIfEmpty(Flux.error(new IllegalStateException("No Coturn Servers Available")))
3030
.collectList()
3131
.toFuture();
3232
}
3333

34-
public CompletableFuture<List<CoturnServer>> getSelectedCoturns() {
35-
ElideNavigatorOnCollection<CoturnServer> navigator = ElideNavigator.of(CoturnServer.class).collection();
36-
Flux<CoturnServer> coturnServerFlux = fafApiAccessor.getMany(navigator);
34+
public CompletableFuture<List<CoturnServer>> getSelectedCoturns(int gameId) {
35+
Flux<CoturnServer> coturnServerFlux = fafApiAccessor.getApiObject("/ice/session/game/" + gameId, IceSession.class)
36+
.flatMapIterable(IceSession::servers);
3737

3838
Set<String> preferredCoturnIds = forgedAlliancePrefs.getPreferredCoturnIds();
3939

src/main/java/com/faforever/client/fa/relay/ice/IceAdapterImpl.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,6 @@ List<String> buildCommand(Path workDirectory, int adapterPort, int gpgPort, int
223223

224224
cmd.addAll(standardIceOptions);
225225

226-
if (forgedAlliancePrefs.isForceRelay()) {
227-
cmd.add("--force-relay");
228-
log.info("Forcing ice adapter relay connection");
229-
}
230-
231226
if (forgedAlliancePrefs.isShowIceAdapterDebugWindow()) {
232227
cmd.add("--debug-window");
233228
cmd.add("--info-window");

src/main/java/com/faforever/client/game/GameService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,7 @@ private CompletableFuture<Void> startGame(GameParameters gameParameters) {
665665
localReplayPort = port;
666666
return iceAdapter.start(gameParameters.getUid());
667667
})
668-
.thenCompose(adapterPort -> coturnService.getSelectedCoturns()
668+
.thenCompose(adapterPort -> coturnService.getSelectedCoturns(uid)
669669
.thenAccept(iceAdapter::setIceServers)
670670
.thenApply(aVoid -> adapterPort))
671671
.thenApply(adapterPort -> {

src/main/java/com/faforever/client/mapstruct/IceServerMapper.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ public Map<String, Object> map(CoturnServer coturnServer) {
1414
return Map.of(
1515
"urls", coturnServer.getUrls().stream().map(URI::toString).toList(),
1616
"credential", coturnServer.getCredential(),
17-
"credentialType", coturnServer.getCredentialType(),
1817
"username", coturnServer.getUsername()
1918
);
2019
}

src/main/java/com/faforever/client/preferences/ForgedAlliancePrefs.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ public class ForgedAlliancePrefs {
2424
ObjectProperty<Path> preferencesFile = new SimpleObjectProperty<>();
2525
ObjectProperty<Path> vaultBaseDirectory = new SimpleObjectProperty<>();
2626
BooleanProperty warnNonAsciiVaultPath = new SimpleBooleanProperty(true);
27-
BooleanProperty forceRelay = new SimpleBooleanProperty(false);
2827
BooleanProperty autoDownloadMaps = new SimpleBooleanProperty(true);
2928
BooleanProperty allowIpv6 = new SimpleBooleanProperty(false);
3029

@@ -60,18 +59,6 @@ public ObjectProperty<Path> preferencesFileProperty() {
6059
return preferencesFile;
6160
}
6261

63-
public boolean isForceRelay() {
64-
return forceRelay.get();
65-
}
66-
67-
public void setForceRelay(boolean forceRelay) {
68-
this.forceRelay.set(forceRelay);
69-
}
70-
71-
public BooleanProperty forceRelayProperty() {
72-
return forceRelay;
73-
}
74-
7562
public boolean isAutoDownloadMaps() {
7663
return autoDownloadMaps.get();
7764
}

0 commit comments

Comments
 (0)