diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/NetworkClient.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/NetworkClient.java index 545d2ed..c7ce876 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/NetworkClient.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/NetworkClient.java @@ -29,6 +29,7 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.InvocationTargetException; import java.net.Socket; +import java.net.SocketException; public class NetworkClient extends DefaultMethodsOverrider { @@ -42,7 +43,7 @@ public class NetworkClient extends DefaultMethodsOverrider { private int maxReconnectAttempts = 0; private int reconnectDelay = 3000; - private int timeout = 3000; + private int timeout = 0; public final NetworkClient build() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { return new NetworkClient(host, port ,packetHandler, eventManager, logger, maxReconnectAttempts, reconnectDelay, timeout); @@ -210,7 +211,7 @@ public class NetworkClient extends DefaultMethodsOverrider { eventManager.executeEvent(new C_DisconnectedEvent(this)); if (logger == null) System.out.println("Disconnected from server"); - else logger.info("Disconnected from server..."); + else logger.info("Disconnected from serverß"); if (maxReconnectAttempts != 0) { try { @@ -230,8 +231,8 @@ public class NetworkClient extends DefaultMethodsOverrider { public synchronized final boolean connect() { if (isConnected()) return false; - if (logger == null) System.out.println("Trying to connect to " + host + ":" + port); - else logger.info("Trying to connect to " + host + ":" + port); + if (logger == null) System.out.println("Trying to connect to " + host + ":" + port + "..."); + else logger.info("Trying to connect to " + host + ":" + port + "..."); try { socket = new Socket(host, port); @@ -301,7 +302,11 @@ public class NetworkClient extends DefaultMethodsOverrider { eventManager.executeEvent(new C_PacketReceivedEvent(this, packet)); else eventManager.executeEvent(new C_PacketFailedReceivedEvent(this, packet, null)); } else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received)); + } catch (SocketException ignored) { + disconnect(false); + return; } catch (IOException | ClassNotFoundException exception) { + exception.printStackTrace(); if (logger == null) System.err.println("Receive thread failed: " + exception.getMessage()); else logger.exception("Receive thread failed", exception); diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/ConnectionHandler.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/ConnectionHandler.java index 99417e6..013fe81 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/ConnectionHandler.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/ConnectionHandler.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; +import java.net.SocketException; public class ConnectionHandler { @@ -89,8 +90,8 @@ public class ConnectionHandler { } public synchronized boolean disconnect(boolean sendDisconnectPacket) { - if (server.getLogger() == null) System.out.println("Disconnecting from server..."); - else server.getLogger().info("Disconnecting from server..."); + if (server.getLogger() == null) System.out.println("Client ID '" + clientID + "' is disconnecting from server..."); + else server.getLogger().info("Client ID '" + clientID + "' is disconnecting from server..."); receiveThread.interrupt(); @@ -102,8 +103,8 @@ public class ConnectionHandler { inputStream.close(); socket.close(); } catch (IOException exception) { - if (server.getLogger() == null) System.err.println("Failed to close socket: " + exception.getMessage()); - else server.getLogger().exception("Failed to close socket", exception); + if (server.getLogger() == null) System.err.println("Client ID '" + clientID + "' failed to close socket: " + exception.getMessage()); + else server.getLogger().exception("Client ID '" + clientID + "' failed to close socket", exception); } } @@ -115,8 +116,8 @@ public class ConnectionHandler { clientID = -1; server.getEventManager().executeEvent(new S_ConnectionHandlerDisconnectedEvent(this)); - if (server.getLogger() == null) System.out.println("Disconnected from server"); - else server.getLogger().info("Disconnected from server..."); + if (server.getLogger() == null) System.out.println("Client ID '" + clientID + "' disconnected from server"); + else server.getLogger().info("Client ID '" + clientID + "' disconnected from server"); return true; } @@ -135,9 +136,12 @@ public class ConnectionHandler { server.getEventManager().executeEvent(new S_PacketReceivedEvent(this, packet)); else server.getEventManager().executeEvent(new S_PacketFailedReceivedEvent(this, packet, null)); } else server.getEventManager().executeEvent(new S_UnknownObjectReceivedEvent(this, received)); + } catch (SocketException ignored) { + disconnect(false); + return; } catch (IOException | ClassNotFoundException exception) { - if (server.getLogger() == null) System.err.println("Receive thread failed: " + exception.getMessage()); - else server.getLogger().exception("Receive thread failed", exception); + if (server.getLogger() == null) System.err.println("Client ID '" + clientID + "' received thread failed: " + exception.getMessage()); + else server.getLogger().exception("Client ID '" + clientID + "' received thread failed", exception); server.getEventManager().executeEvent(new S_ReceiveThreadFailedEvent(this, exception)); } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/NetworkServer.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/NetworkServer.java index fc95eb6..fe46590 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/NetworkServer.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/NetworkServer.java @@ -40,7 +40,7 @@ public class NetworkServer extends DefaultMethodsOverrider { private int maxRestartAttempts = 0; private int restartDelay = 3000; - private int timeout = 3000; + private int timeout = 0; public final NetworkServer build() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { return new NetworkServer(port, packetHandler, eventManager, logger, maxRestartAttempts, restartDelay, timeout); @@ -156,8 +156,8 @@ public class NetworkServer extends DefaultMethodsOverrider { public synchronized final boolean stop() { if (!isRunning()) return false; - if (logger == null) System.out.println("Trying to stop server"); - else logger.info("Trying to stop server"); + if (logger == null) System.out.println("Trying to stop server..."); + else logger.info("Trying to stop server..."); new ArrayList<>(connectionHandlers).forEach(connectionHandler -> connectionHandler.disconnect(true)); connectionHandlers.clear(); @@ -176,8 +176,8 @@ public class NetworkServer extends DefaultMethodsOverrider { public synchronized final boolean start() { if (isRunning()) return false; - if (logger == null) System.out.println("Trying to start on port " + port); - else logger.info("Trying to start on port " + port); + if (logger == null) System.out.println("Trying to start on port " + port + "..."); + else logger.info("Trying to start on port " + port + "..."); try { serverSocket = new ServerSocket(port); @@ -186,7 +186,7 @@ public class NetworkServer extends DefaultMethodsOverrider { incomingConnectionThread.start(); if (currentAttempts == 0) currentAttempts++; - if (logger == null) System.out.println("Started ad port" + port + " (Attempts: " + currentAttempts + ")"); + if (logger == null) System.out.println("Started at port " + port + " (Attempts: " + currentAttempts + ")"); else logger.info("Started at port " + port + " (Attempts: " + currentAttempts + ")"); currentAttempts = 0; diff --git a/src/main/java/tests/Client.java b/src/main/java/tests/Client.java new file mode 100644 index 0000000..2adcc6c --- /dev/null +++ b/src/main/java/tests/Client.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/UnlegitDqrk + * See LICENSE-File if exists + */ + +package tests; + +import me.finn.unlegitlibrary.event.EventManager; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.PacketHandler; + +import java.lang.reflect.InvocationTargetException; + +public class Client { + public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + new NetworkClient.ClientBuilder().setPacketHandler(new PacketHandler()).setEventManager(new EventManager()). + setHost("localhost").setPort(25565).build().connect(); + } +} diff --git a/src/main/java/tests/Server.java b/src/main/java/tests/Server.java new file mode 100644 index 0000000..7d52e40 --- /dev/null +++ b/src/main/java/tests/Server.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * + * You are unauthorized to remove this copyright. + * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/UnlegitDqrk + * See LICENSE-File if exists + */ + +package tests; + +import me.finn.unlegitlibrary.event.EventManager; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.PacketHandler; +import me.finn.unlegitlibrary.network.system.server.NetworkServer; + +import java.lang.reflect.InvocationTargetException; + +public class Server { + public static void main(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + new NetworkServer.ServerBuilder().setPacketHandler(new PacketHandler()).setEventManager(new EventManager()). + setPort(25565).build().start(); + } +}