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