From 444a81abc37fab287fed8218497980a101da816b Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Tue, 14 Oct 2025 23:44:45 +0200 Subject: [PATCH] Improved API for dependency injection --- .../org/toop/app/layer/layers/ConnectedLayer.java | 2 +- .../networking/NetworkingClientEventListener.java | 4 ++-- .../framework/networking/NetworkingClientManager.java | 11 ++++------- .../clients/TournamentNetworkingClient.java | 7 ++++++- .../framework/networking/events/NetworkEvents.java | 4 ++-- .../networking/interfaces/NetworkingClient.java | 1 + .../interfaces/NetworkingClientManager.java | 2 +- 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/toop/app/layer/layers/ConnectedLayer.java b/app/src/main/java/org/toop/app/layer/layers/ConnectedLayer.java index a5db92c..c631932 100644 --- a/app/src/main/java/org/toop/app/layer/layers/ConnectedLayer.java +++ b/app/src/main/java/org/toop/app/layer/layers/ConnectedLayer.java @@ -112,7 +112,7 @@ public final class ConnectedLayer extends Layer { new EventFlow() .addPostEvent( NetworkEvents.StartClient.class, - TournamentNetworkingClient.class, + new TournamentNetworkingClient(), information.serverIP(), Integer.parseInt(information.serverPort())) .onResponse( diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java b/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java index 1086c8c..f45c3dc 100644 --- a/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java +++ b/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java @@ -36,8 +36,8 @@ public class NetworkingClientEventListener { .listen(this::handleShutdownAll); } - void handleStartClient(NetworkEvents.StartClient event) { - long clientId = clientManager.startClient(event.networkingClientClass(), event.host(), event.port()).orElse(-1); + void handleStartClient(NetworkEvents.StartClient event) { + long clientId = clientManager.startClient(SnowflakeGenerator.nextId(), event.networkingClientClass(), event.host(), event.port()).orElse(-1); logger.info("Client {} started", clientId); try { new EventFlow() diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java index 99fee84..cdd3a82 100644 --- a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java +++ b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java @@ -4,7 +4,6 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.toop.framework.SnowflakeGenerator; import org.toop.framework.networking.interfaces.NetworkingClient; public class NetworkingClientManager implements org.toop.framework.networking.interfaces.NetworkingClientManager { @@ -14,18 +13,16 @@ public class NetworkingClientManager implements org.toop.framework.networking.in public NetworkingClientManager() {} @Override - public OptionalLong startClient(Class networkingClientClass, String host, int port) { - long clientId = SnowflakeGenerator.nextId(); + public OptionalLong startClient(long id, NetworkingClient networkingClient, String host, int port) { try { - NetworkingClient networkingClient = networkingClientClass - .getConstructor(long.class, String.class, int.class).newInstance(clientId, host, port); - this.networkClients.put(clientId, networkingClient); + networkingClient.connect(id, host, port); + this.networkClients.put(id, networkingClient); logger.info("New client started successfully for {}:{}", host, port); } catch (Exception e) { logger.error(e); // TODO Better error handling return OptionalLong.empty(); } - return OptionalLong.of(clientId); + return OptionalLong.of(id); } @Override diff --git a/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java b/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java index c678964..76d26d6 100644 --- a/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java +++ b/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java @@ -18,7 +18,10 @@ public class TournamentNetworkingClient implements NetworkingClient { private static final Logger logger = LogManager.getLogger(TournamentNetworkingClient.class); private Channel channel; - public TournamentNetworkingClient(long clientId, String host, int port) { + public TournamentNetworkingClient() {} + + @Override + public boolean connect(long clientId, String host, int port) { try { Bootstrap bootstrap = new Bootstrap(); EventLoopGroup workerGroup = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); @@ -43,7 +46,9 @@ public class TournamentNetworkingClient implements NetworkingClient { this.channel = channelFuture.channel(); } catch (Exception e) { logger.error("Failed to create networking client instance", e); + return false; } + return true; } @Override diff --git a/framework/src/main/java/org/toop/framework/networking/events/NetworkEvents.java b/framework/src/main/java/org/toop/framework/networking/events/NetworkEvents.java index 4e983b6..63fb7fc 100644 --- a/framework/src/main/java/org/toop/framework/networking/events/NetworkEvents.java +++ b/framework/src/main/java/org/toop/framework/networking/events/NetworkEvents.java @@ -111,8 +111,8 @@ public class NetworkEvents extends EventsBase { * @param port Server port. * @param eventSnowflake Unique event identifier for correlation. */ - public record StartClient( - Class networkingClientClass, + public record StartClient( + NetworkingClient networkingClientClass, String host, int port, long identifier) implements UniqueEvent {} diff --git a/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClient.java b/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClient.java index a00caac..6cca1e9 100644 --- a/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClient.java +++ b/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClient.java @@ -1,6 +1,7 @@ package org.toop.framework.networking.interfaces; public interface NetworkingClient { + boolean connect(long clientId, String host, int port); boolean isActive(); void writeAndFlush(String msg); void closeConnection(); diff --git a/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClientManager.java b/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClientManager.java index d6869fc..0a2d70d 100644 --- a/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClientManager.java +++ b/framework/src/main/java/org/toop/framework/networking/interfaces/NetworkingClientManager.java @@ -3,7 +3,7 @@ package org.toop.framework.networking.interfaces; import java.util.OptionalLong; public interface NetworkingClientManager { - OptionalLong startClient(Class networkingClientClass, String host, int port); + OptionalLong startClient(long id, NetworkingClient networkingClientClass, String host, int port); boolean sendCommand(long id, String command); boolean reconnect(long id); boolean changeAddress(long id, String host, int port);