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

@@ -36,8 +36,8 @@ public class NetworkingClientEventListener {
.listen(this::handleShutdownAll);
}
void handleStartClient(NetworkEvents.StartClient<? extends NetworkingClient> 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()

View File

@@ -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<? extends NetworkingClient> 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

View File

@@ -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

View File

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

View File

@@ -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();

View File

@@ -3,7 +3,7 @@ package org.toop.framework.networking.interfaces;
import java.util.OptionalLong;
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 reconnect(long id);
boolean changeAddress(long id, String host, int port);