Improved API for dependency injection

This commit is contained in:
lieght
2025-10-14 23:44:45 +02:00
parent d0676d9363
commit 444a81abc3
7 changed files with 17 additions and 14 deletions

View File

@@ -112,7 +112,7 @@ public final class ConnectedLayer extends Layer {
new EventFlow() new EventFlow()
.addPostEvent( .addPostEvent(
NetworkEvents.StartClient.class, NetworkEvents.StartClient.class,
TournamentNetworkingClient.class, new TournamentNetworkingClient(),
information.serverIP(), information.serverIP(),
Integer.parseInt(information.serverPort())) Integer.parseInt(information.serverPort()))
.onResponse( .onResponse(

View File

@@ -36,8 +36,8 @@ public class NetworkingClientEventListener {
.listen(this::handleShutdownAll); .listen(this::handleShutdownAll);
} }
void handleStartClient(NetworkEvents.StartClient<? extends NetworkingClient> event) { void handleStartClient(NetworkEvents.StartClient event) {
long clientId = clientManager.startClient(event.networkingClientClass(), event.host(), event.port()).orElse(-1); long clientId = clientManager.startClient(SnowflakeGenerator.nextId(), event.networkingClientClass(), event.host(), event.port()).orElse(-1);
logger.info("Client {} started", clientId); logger.info("Client {} started", clientId);
try { try {
new EventFlow() new EventFlow()

View File

@@ -4,7 +4,6 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.toop.framework.SnowflakeGenerator;
import org.toop.framework.networking.interfaces.NetworkingClient; import org.toop.framework.networking.interfaces.NetworkingClient;
public class NetworkingClientManager implements org.toop.framework.networking.interfaces.NetworkingClientManager { 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() {} public NetworkingClientManager() {}
@Override @Override
public OptionalLong startClient(Class<? extends NetworkingClient> networkingClientClass, String host, int port) { public OptionalLong startClient(long id, NetworkingClient networkingClient, String host, int port) {
long clientId = SnowflakeGenerator.nextId();
try { try {
NetworkingClient networkingClient = networkingClientClass networkingClient.connect(id, host, port);
.getConstructor(long.class, String.class, int.class).newInstance(clientId, host, port); this.networkClients.put(id, networkingClient);
this.networkClients.put(clientId, networkingClient);
logger.info("New client started successfully for {}:{}", host, port); logger.info("New client started successfully for {}:{}", host, port);
} catch (Exception e) { } catch (Exception e) {
logger.error(e); // TODO Better error handling logger.error(e); // TODO Better error handling
return OptionalLong.empty(); return OptionalLong.empty();
} }
return OptionalLong.of(clientId); return OptionalLong.of(id);
} }
@Override @Override

View File

@@ -18,7 +18,10 @@ public class TournamentNetworkingClient implements NetworkingClient {
private static final Logger logger = LogManager.getLogger(TournamentNetworkingClient.class); private static final Logger logger = LogManager.getLogger(TournamentNetworkingClient.class);
private Channel channel; private Channel channel;
public TournamentNetworkingClient(long clientId, String host, int port) { public TournamentNetworkingClient() {}
@Override
public boolean connect(long clientId, String host, int port) {
try { try {
Bootstrap bootstrap = new Bootstrap(); Bootstrap bootstrap = new Bootstrap();
EventLoopGroup workerGroup = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); EventLoopGroup workerGroup = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory());
@@ -43,7 +46,9 @@ public class TournamentNetworkingClient implements NetworkingClient {
this.channel = channelFuture.channel(); this.channel = channelFuture.channel();
} catch (Exception e) { } catch (Exception e) {
logger.error("Failed to create networking client instance", e); logger.error("Failed to create networking client instance", e);
return false;
} }
return true;
} }
@Override @Override

View File

@@ -111,8 +111,8 @@ public class NetworkEvents extends EventsBase {
* @param port Server port. * @param port Server port.
* @param eventSnowflake Unique event identifier for correlation. * @param eventSnowflake Unique event identifier for correlation.
*/ */
public record StartClient<T extends NetworkingClient>( public record StartClient(
Class<T> networkingClientClass, NetworkingClient networkingClientClass,
String host, String host,
int port, int port,
long identifier) implements UniqueEvent {} long identifier) implements UniqueEvent {}

View File

@@ -1,6 +1,7 @@
package org.toop.framework.networking.interfaces; package org.toop.framework.networking.interfaces;
public interface NetworkingClient { public interface NetworkingClient {
boolean connect(long clientId, String host, int port);
boolean isActive(); boolean isActive();
void writeAndFlush(String msg); void writeAndFlush(String msg);
void closeConnection(); void closeConnection();

View File

@@ -3,7 +3,7 @@ package org.toop.framework.networking.interfaces;
import java.util.OptionalLong; import java.util.OptionalLong;
public interface NetworkingClientManager { public interface NetworkingClientManager {
OptionalLong startClient(Class<? extends NetworkingClient> networkingClientClass, String host, int port); OptionalLong startClient(long id, NetworkingClient networkingClientClass, String host, int port);
boolean sendCommand(long id, String command); boolean sendCommand(long id, String command);
boolean reconnect(long id); boolean reconnect(long id);
boolean changeAddress(long id, String host, int port); boolean changeAddress(long id, String host, int port);