mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 19:04:49 +00:00
Improved API for dependency injection
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user