Pipeline implement

This commit is contained in:
2024-07-08 00:57:37 +02:00
parent 5b7051c123
commit 24c2a7b44c
3 changed files with 122 additions and 74 deletions

View File

@@ -0,0 +1,17 @@
package me.finn.unlegitlibrary.network.system;
import me.finn.unlegitlibrary.event.EventManager;
import me.finn.unlegitlibrary.network.system.packets.PacketHandler;
import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider;
public abstract class NetworkPipeline extends DefaultMethodsOverrider {
public int port = 3982;
public PacketHandler packetHandler = new PacketHandler();
public EventManager eventManager = new EventManager();
public boolean logDebug = false;
public int maxAttempts = 10; // -1 = Endless | 0 = Disabled
public int attemptDelayInSeconds = 5;
public abstract void implement();
}

View File

@@ -9,6 +9,7 @@
package me.finn.unlegitlibrary.network.system.client; package me.finn.unlegitlibrary.network.system.client;
import me.finn.unlegitlibrary.event.EventManager; import me.finn.unlegitlibrary.event.EventManager;
import me.finn.unlegitlibrary.network.system.NetworkPipeline;
import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_PacketFailedReceivedEvent; import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_PacketFailedReceivedEvent;
import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_PacketReceivedEvent; import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_PacketReceivedEvent;
import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_UnknownObjectReceivedEvent; import me.finn.unlegitlibrary.network.system.client.events.packets.received.C_UnknownObjectReceivedEvent;
@@ -29,15 +30,33 @@ import java.net.Socket;
import java.net.SocketException; import java.net.SocketException;
public class NetworkClient extends DefaultMethodsOverrider { public class NetworkClient extends DefaultMethodsOverrider {
public class ClientPipeline extends NetworkPipeline {
public final NetworkClient networkClient;
public String host;
private final String host; public ClientPipeline(NetworkClient networkClient) {
private final int port; this.networkClient = networkClient;
private final PacketHandler packetHandler; }
private final EventManager eventManager;
private final boolean autoReconnect; @Override
private final boolean debugLog; public void implement() {
private final int maxAttempts; networkClient.host = host;
private final int attemptDelayInSec; networkClient.port = port;
networkClient.packetHandler = packetHandler;
networkClient.eventManager = eventManager;
networkClient.maxAttempts = maxAttempts;
networkClient.attemptDelayInSec = attemptDelayInSeconds;
networkClient.debugLog = debugLog;
}
}
private String host;
private int port;
private PacketHandler packetHandler;
private EventManager eventManager;
private boolean debugLog;
private int maxAttempts;
private int attemptDelayInSec;
private Socket socket; private Socket socket;
private ObjectOutputStream objectOutputStream; private ObjectOutputStream objectOutputStream;
@@ -46,19 +65,7 @@ public class NetworkClient extends DefaultMethodsOverrider {
private int attempt = 1; private int attempt = 1;
private boolean needClientID = false; private final Thread receiveThread = new Thread(this::receive); private boolean needClientID = false; private final Thread receiveThread = new Thread(this::receive);
private NetworkClient(String host, int port, PacketHandler packetHandler, EventManager eventManager, boolean autoReconnect, boolean debugLog, int maxAttempts, int attemptDelayInSec) { private NetworkClient() {
this.host = host;
this.port = port;
this.packetHandler = packetHandler;
this.eventManager = eventManager;
this.autoReconnect = autoReconnect;
this.debugLog = debugLog;
this.maxAttempts = maxAttempts;
this.attemptDelayInSec = attemptDelayInSec;
attempt = 1; attempt = 1;
} }
@@ -83,7 +90,7 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
public final boolean isAutoReconnectEnabled() { public final boolean isAutoReconnectEnabled() {
return autoReconnect; return maxAttempts != 0;
} }
public final PacketHandler getPacketHandler() { public final PacketHandler getPacketHandler() {
@@ -132,7 +139,7 @@ public class NetworkClient extends DefaultMethodsOverrider {
attempt = 1; attempt = 1;
if (debugLog) System.out.println("Connected to Server. Attempts: " + attempt); if (debugLog) System.out.println("Connected to Server. Attempts: " + attempt);
} catch (SocketException exception) { } catch (SocketException exception) {
if (autoReconnect) reconnect(); if (isAutoReconnectEnabled()) reconnect();
else throw exception; else throw exception;
} }
} }
@@ -233,8 +240,14 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
} catch (EOFException exception) { } catch (EOFException exception) {
attempt = 1; attempt = 1;
if (autoReconnect && maxAttempts == -1 || attempt <= maxAttempts) reconnect(); if (isAutoReconnectEnabled()) {
else { if (maxAttempts == -1) reconnect();
else if (attempt <= maxAttempts) reconnect();
else {
eventManager.executeEvent(new C_StoppedEvent(this));
exception.printStackTrace();
}
} else {
eventManager.executeEvent(new C_StoppedEvent(this)); eventManager.executeEvent(new C_StoppedEvent(this));
exception.printStackTrace(); exception.printStackTrace();
} }
@@ -245,7 +258,7 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
private final void reconnect() { private final void reconnect() {
if (autoReconnect) { if (isAutoReconnectEnabled()) {
if (isConnected()) { if (isConnected()) {
try { try {
disconnect(); disconnect();
@@ -263,7 +276,8 @@ public class NetworkClient extends DefaultMethodsOverrider {
Thread.sleep(attemptDelayInSec * 1000L); Thread.sleep(attemptDelayInSec * 1000L);
connect(); connect();
} catch (InterruptedException | IOException exception) { } catch (InterruptedException | IOException exception) {
if (maxAttempts == -1 || attempt <= maxAttempts) reconnect(); if (maxAttempts == -1) reconnect();
else if (attempt <= maxAttempts) reconnect();
else exception.printStackTrace(); else exception.printStackTrace();
} }
} else { } else {
@@ -276,21 +290,15 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
} }
public static class ClientBuilder { public class ClientBuilder {
private int port; private int port;
private String host; private String host;
private PacketHandler packetHandler = new PacketHandler(); private PacketHandler packetHandler = new PacketHandler();
private EventManager eventManager = new EventManager(); private EventManager eventManager = new EventManager();
private boolean autoReconnect = false;
private boolean debugLog = false; private boolean debugLog = false;
private int maxAttempts = 10; private int maxAttempts = 0;
private int attemptDelayInSec = 1; private int attemptDelayInSec = 1;
public final ClientBuilder enableAutoReconnect() {
this.autoReconnect = true;
return this;
}
public final ClientBuilder enableDebugLog() { public final ClientBuilder enableDebugLog() {
this.debugLog = true; this.debugLog = true;
return this; return this;
@@ -327,11 +335,21 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
public final NetworkClient build() { public final NetworkClient build() {
return new NetworkClient(host, port, packetHandler, eventManager, autoReconnect, debugLog, maxAttempts, attemptDelayInSec); ClientPipeline pipeline = new ClientPipeline(new NetworkClient());
pipeline.host = host;
pipeline.port = port;
pipeline.packetHandler = packetHandler;
pipeline.eventManager = eventManager;
pipeline.maxAttempts = maxAttempts;
pipeline.logDebug = debugLog;
pipeline.attemptDelayInSeconds = attemptDelayInSec;
pipeline.implement();
return pipeline.networkClient;
} }
} }
} }

View File

@@ -9,6 +9,7 @@
package me.finn.unlegitlibrary.network.system.server; package me.finn.unlegitlibrary.network.system.server;
import me.finn.unlegitlibrary.event.EventManager; import me.finn.unlegitlibrary.event.EventManager;
import me.finn.unlegitlibrary.network.system.NetworkPipeline;
import me.finn.unlegitlibrary.network.system.packets.Packet; import me.finn.unlegitlibrary.network.system.packets.Packet;
import me.finn.unlegitlibrary.network.system.packets.PacketHandler; import me.finn.unlegitlibrary.network.system.packets.PacketHandler;
import me.finn.unlegitlibrary.network.system.server.events.server.S_StartedEvent; import me.finn.unlegitlibrary.network.system.server.events.server.S_StartedEvent;
@@ -23,28 +24,37 @@ import java.util.List;
public class NetworkServer { public class NetworkServer {
private final int port; public class ServerPipeline extends NetworkPipeline {
private final PacketHandler packetHandler;
private final EventManager eventManager; public final NetworkServer networkServer;
private final boolean autoRestart;
private final boolean debugLog; public ServerPipeline(NetworkServer networkServer) {
private final int maxAttempts; this.networkServer = networkServer;
private final int attemptDelayInSec; }
@Override
public void implement() {
networkServer.port = port;
networkServer.debugLog = debugLog;
networkServer.packetHandler = packetHandler;
networkServer.eventManager = eventManager;
networkServer.maxAttempts = maxAttempts;
networkServer.attemptDelayInSec = attemptDelayInSec;
}
}
private int port;
private PacketHandler packetHandler;
private EventManager eventManager;
private boolean debugLog;
private int maxAttempts;
private int attemptDelayInSec;
private final List<ClientHandler> clientHandlers = new ArrayList<>(); private final List<ClientHandler> clientHandlers = new ArrayList<>();
private ServerSocket serverSocket; private ServerSocket serverSocket;
private int attempt = 1; private int attempt = 1;
private NetworkServer(int port, PacketHandler packetHandler, EventManager eventManager, boolean autoRestart, boolean debugLog, int maxAttempts, int attemptDelayInSec) { private NetworkServer() {
this.port = port;
this.packetHandler = packetHandler;
this.eventManager = eventManager;
this.autoRestart = autoRestart;
this.debugLog = debugLog;
this.maxAttempts = maxAttempts;
this.attemptDelayInSec = attemptDelayInSec;
} private final Thread incomingConnectionThread = new Thread(this::incomingConnection); } private final Thread incomingConnectionThread = new Thread(this::incomingConnection);
public final int getPort() { public final int getPort() {
@@ -56,7 +66,7 @@ public class NetworkServer {
} }
public final boolean isAutoRestart() { public final boolean isAutoRestart() {
return autoRestart; return maxAttempts != 0;
} }
public final boolean isDebugLogEnabled() { public final boolean isDebugLogEnabled() {
@@ -95,8 +105,8 @@ public class NetworkServer {
if (debugLog) System.out.println("Server started on port " + port + ". Attempts: " + attempt); if (debugLog) System.out.println("Server started on port " + port + ". Attempts: " + attempt);
} catch (BindException exception) { } catch (BindException exception) {
if (autoRestart) { if (isAutoRestart()) {
if (attempt > maxAttempts) throw exception; if (attempt > maxAttempts && maxAttempts != -1) throw exception;
if (debugLog) System.out.println("Failed to start! Retrying... (Attempt: " + attempt++ + ")"); if (debugLog) System.out.println("Failed to start! Retrying... (Attempt: " + attempt++ + ")");
Thread.sleep(attemptDelayInSec * 1000L); Thread.sleep(attemptDelayInSec * 1000L);
@@ -158,20 +168,14 @@ public class NetworkServer {
return eventManager; return eventManager;
} }
public static class ServerBuilder { public class ServerBuilder {
private int port; private int port;
private boolean autoRestart = false;
private boolean debugLog = false; private boolean debugLog = false;
private PacketHandler packetHandler = new PacketHandler(); private PacketHandler packetHandler = new PacketHandler();
private EventManager eventManager = new EventManager(); private EventManager eventManager = new EventManager();
private int maxAttempts = 10; private int maxAttempts = 0;
private int attemptDelayInSec = 1; private int attemptDelayInSec = 1;
public final ServerBuilder enableAutoRestart() {
this.autoRestart = true;
return this;
}
public final ServerBuilder enableDebugLog() { public final ServerBuilder enableDebugLog() {
this.debugLog = true; this.debugLog = true;
return this; return this;
@@ -203,11 +207,20 @@ public class NetworkServer {
} }
public final NetworkServer build() { public final NetworkServer build() {
return new NetworkServer(port, packetHandler, eventManager, autoRestart, debugLog, maxAttempts, attemptDelayInSec); ServerPipeline pipeline = new ServerPipeline(new NetworkServer());
pipeline.port = port;
pipeline.packetHandler = packetHandler;
pipeline.eventManager = eventManager;
pipeline.maxAttempts = maxAttempts;
pipeline.logDebug = debugLog;
pipeline.attemptDelayInSeconds = attemptDelayInSec;
pipeline.implement();
return pipeline.networkServer;
} }
} }
} }