From 64f0269137280b73a169428c804575dfd8bbe3ca Mon Sep 17 00:00:00 2001 From: Andrei <139968939+Andrei965@users.noreply.github.com> Date: Sun, 19 Jan 2025 17:05:14 +0200 Subject: [PATCH] feat(shulker-server-agent): add watchGameServer method to api --- .../java/com/agones/dev/sdk/AgonesSDK.java | 2 ++ .../com/agones/dev/sdk/AgonesSDKImpl.java | 28 +++++++++++++++++++ .../shulker-server-agent/build.gradle.kts | 2 ++ .../serveragent/api/ShulkerServerAPIImpl.kt | 5 ++++ packages/shulker-server-api/build.gradle.kts | 3 ++ .../serveragent/api/ShulkerServerAPI.java | 4 +++ 6 files changed, 44 insertions(+) diff --git a/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDK.java b/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDK.java index 53c440bd..9273468b 100644 --- a/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDK.java +++ b/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDK.java @@ -2,6 +2,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; public interface AgonesSDK { void destroy(); @@ -12,6 +13,7 @@ public interface AgonesSDK { CompletableFuture setReady(); CompletableFuture setAllocated(); CompletableFuture setReserved(long seconds); + void watchGameServer(Consumer consumer); void askShutdown(); void sendHealthcheck(); diff --git a/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDKImpl.java b/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDKImpl.java index 932e0c0c..8af96e94 100644 --- a/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDKImpl.java +++ b/packages/google-agones-sdk/bindings/java/src/main/java/com/agones/dev/sdk/AgonesSDKImpl.java @@ -11,6 +11,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.function.Consumer; public final class AgonesSDKImpl implements AgonesSDK { private static final Empty EMPTY_PAYLOAD = Empty.getDefaultInstance(); @@ -75,6 +76,33 @@ public CompletableFuture setReserved(long seconds) { ).thenAccept((reply) -> {}); } + @Override + public void watchGameServer(Consumer consumer) { + // Create a StreamObserver that forwards each GameServer to the Consumer + StreamObserver responseObserver = new StreamObserver<>() { + @Override + public void onNext(GameServer value) { + // Forward the GameServer to the Consumer for handling + consumer.accept(value); + } + + @Override + public void onError(Throwable t) { + // Optionally handle errors + System.err.println("Error during stream: " + t.getMessage()); + } + + @Override + public void onCompleted() { + // Optionally handle completion of the stream + System.out.println("Stream completed."); + } + }; + + // Make the gRPC call to start watching the GameServer stream + this.stub.watchGameServer(EMPTY_PAYLOAD, responseObserver); + } + @Override public void askShutdown() { try { diff --git a/packages/shulker-server-agent/build.gradle.kts b/packages/shulker-server-agent/build.gradle.kts index 0ae8ff4b..cf73c551 100644 --- a/packages/shulker-server-agent/build.gradle.kts +++ b/packages/shulker-server-agent/build.gradle.kts @@ -5,6 +5,8 @@ dependencies { // Agones commonImplementation(project(":packages:google-agones-sdk")) + + commonImplementation(libs.grpc.stub) } setOf("processPaperResources").forEach { taskName -> diff --git a/packages/shulker-server-agent/src/common/kotlin/io/shulkermc/serveragent/api/ShulkerServerAPIImpl.kt b/packages/shulker-server-agent/src/common/kotlin/io/shulkermc/serveragent/api/ShulkerServerAPIImpl.kt index ea42d7d1..41d26f33 100644 --- a/packages/shulker-server-agent/src/common/kotlin/io/shulkermc/serveragent/api/ShulkerServerAPIImpl.kt +++ b/packages/shulker-server-agent/src/common/kotlin/io/shulkermc/serveragent/api/ShulkerServerAPIImpl.kt @@ -1,12 +1,17 @@ package io.shulkermc.serveragent.api +import com.agones.dev.sdk.GameServer import io.shulkermc.serveragent.ShulkerServerAgentCommon import java.util.concurrent.CompletableFuture +import java.util.function.Consumer class ShulkerServerAPIImpl(private val agent: ShulkerServerAgentCommon) : ShulkerServerAPI() { override fun askShutdown() = this.agent.shutdown() override fun setReady(): CompletableFuture = this.agent.agonesGateway.setReady().thenAccept {} + override fun watchGameServer(consumer: Consumer) { + return this.agent.agonesGateway.watchGameServer(consumer) + } override fun setAllocated(): CompletableFuture = this.agent.agonesGateway.setAllocated().thenAccept {} diff --git a/packages/shulker-server-api/build.gradle.kts b/packages/shulker-server-api/build.gradle.kts index 1e6b1768..89f18602 100644 --- a/packages/shulker-server-api/build.gradle.kts +++ b/packages/shulker-server-api/build.gradle.kts @@ -1,3 +1,6 @@ +dependencies { + implementation(project(":packages:google-agones-sdk")) +} configure { withJavadocJar() withSourcesJar() diff --git a/packages/shulker-server-api/src/main/java/io/shulkermc/serveragent/api/ShulkerServerAPI.java b/packages/shulker-server-api/src/main/java/io/shulkermc/serveragent/api/ShulkerServerAPI.java index 43897909..dc3d221d 100644 --- a/packages/shulker-server-api/src/main/java/io/shulkermc/serveragent/api/ShulkerServerAPI.java +++ b/packages/shulker-server-api/src/main/java/io/shulkermc/serveragent/api/ShulkerServerAPI.java @@ -1,12 +1,16 @@ package io.shulkermc.serveragent.api; +import com.agones.dev.sdk.GameServer; + import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; public abstract class ShulkerServerAPI { public static ShulkerServerAPI INSTANCE; abstract public void askShutdown(); abstract public CompletableFuture setReady(); + abstract public void watchGameServer(Consumer consumer); abstract public CompletableFuture setAllocated(); abstract public CompletableFuture setReserved(long seconds); }