Skip to content

Commit

Permalink
🐛 Support cases where no response is emitted from server
Browse files Browse the repository at this point in the history
  • Loading branch information
MrGraversen committed Oct 22, 2023
1 parent 31da756 commit 5cc3576
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 16 deletions.
25 changes: 11 additions & 14 deletions src/main/java/io/graversen/rust/rcon/DefaultRustRconClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import lombok.extern.slf4j.Slf4j;
import org.java_websocket.framing.CloseFrame;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
Expand Down Expand Up @@ -69,7 +70,7 @@ public Function<RustRconRequest, RustRconRequestDTO> mapRequest() {
}

@Override
public Function<RustRconResponseDTO, RustRconResponse> mapResponse(@NonNull RustRconRequest request) {
public Function<RustRconResponseDTO, RustRconResponse> mapResponse(@Nullable RustRconRequest request) {
return rustRconResponseDTO -> new RustRconResponse(
Objects.requireNonNullElse(rustRconResponseDTO.getIdentifier(), -1),
rustRconResponseDTO.getMessage(),
Expand Down Expand Up @@ -135,23 +136,19 @@ public void onWsMessage(@NonNull WsMessageEvent messageEvent) {
final var rconMessage = jsonMapper().fromJson(messageEvent.getMessage(), RustRconResponseDTO.class);
final var rconRequest = getAsyncRequests().getIfPresent(rconMessage.getIdentifier());

if (rconRequest != null) {
final var mappedRconMessage = mapResponse(rconRequest).apply(rconMessage);
final var mappedRconMessage = mapResponse(rconRequest).apply(rconMessage);

if (rconMessage.getIdentifier() >= initialMessageIdentifier()) {
final var responseFutureOrNull = getAsyncResponses().getIfPresent(rconMessage.getIdentifier());
if (rconMessage.getIdentifier() >= initialMessageIdentifier()) {
final var responseFutureOrNull = getAsyncResponses().getIfPresent(rconMessage.getIdentifier());

if (responseFutureOrNull != null) {
responseFutureOrNull.complete(mappedRconMessage);
} else {
log.warn("Could not resolve response future for ID: {} (Discarding it)", rconMessage.getIdentifier());
}
if (responseFutureOrNull != null) {
responseFutureOrNull.complete(mappedRconMessage);
} else {
log.warn("Could not resolve response future for ID: {} (Discarding it)", rconMessage.getIdentifier());
}

eventBus.post(new RconReceivedEvent(name(), mappedRconMessage));
} else {
log.warn("Could not resolve request for ID: {} (Discarding it)", rconMessage.getIdentifier());
}

eventBus.post(new RconReceivedEvent(name(), mappedRconMessage));
}

@Synchronized
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/io/graversen/rust/rcon/RustRconClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.graversen.rust.rcon.util.JsonMapper;
import lombok.NonNull;

import javax.annotation.Nullable;
import java.io.Closeable;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
Expand All @@ -13,7 +14,7 @@ public interface RustRconClient extends EventEmitter, Closeable {

Function<RustRconRequest, RustRconRequestDTO> mapRequest();

Function<RustRconResponseDTO, RustRconResponse> mapResponse(@NonNull RustRconRequest request);
Function<RustRconResponseDTO, RustRconResponse> mapResponse(@Nullable RustRconRequest request);

JsonMapper jsonMapper();

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/io/graversen/rust/rcon/RustRconResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import lombok.*;

import javax.annotation.Nullable;
import java.time.LocalDateTime;

@Getter
Expand All @@ -13,5 +14,5 @@ public class RustRconResponse {
private final @NonNull String message;
private final @NonNull String type;
private final @NonNull RustServer server;
private final @NonNull RustRconRequest request;
private final @Nullable RustRconRequest request;
}

0 comments on commit 5cc3576

Please sign in to comment.