From 09e0f2a46162bcb20f0a750c9175152803ec157e Mon Sep 17 00:00:00 2001 From: Finn Date: Tue, 7 Jan 2025 09:49:21 +0100 Subject: [PATCH] Bug fixes and new network system --- pom.xml | 2 +- .../unlegitlibrary/addon/AddonLoader.java | 4 +- .../finn/unlegitlibrary/addon/impl/Addon.java | 4 +- .../finn/unlegitlibrary/command/Command.java | 7 +- .../unlegitlibrary/event/EventManager.java | 26 +- .../network/system/client/NetworkClient.java | 293 ++++++++---------- .../client/events/C_PacketReceivedEvent.java | 23 ++ .../events/C_PacketReceivedFailedEvent.java | 23 ++ .../client/events/C_PacketSendEvent.java | 23 ++ .../events/C_PacketSendFailedEvent.java | 23 ++ .../events/C_UnknownObjectReceivedEvent.java | 22 ++ .../client/events/ClientConnectedEvent.java | 20 ++ .../events/ClientDisconnectedEvent.java | 20 ++ .../received/C_PacketFailedReceivedEvent.java | 46 --- .../received/C_PacketReceivedEvent.java | 44 --- .../C_UnknownObjectReceivedEvent.java | 43 --- .../events/send/C_PacketFailedSendEvent.java | 46 --- .../client/events/send/C_PacketSendEvent.java | 44 --- .../client/events/state/C_ConnectedEvent.java | 41 --- .../events/state/C_DisconnectedEvent.java | 41 --- .../state/C_ReceiveThreadFailedEvent.java | 43 --- .../network/system/packets/Packet.java | 13 +- .../network/system/packets/PacketHandler.java | 32 +- .../network/system/packets/SystemPacket.java | 15 - .../packets/impl/ClientDisconnectPacket.java | 48 --- .../system/packets/impl/ClientIDPacket.java | 11 +- .../system/server/ConnectionHandler.java | 141 ++++----- .../network/system/server/NetworkServer.java | 132 ++++---- ...a => ConnectionHandlerConnectedEvent.java} | 9 +- ...> ConnectionHandlerDisconnectedEvent.java} | 9 +- .../events/IncomingConnectionEvent.java | 24 ++ .../received => }/S_PacketReceivedEvent.java | 7 +- ....java => S_PacketReceivedFailedEvent.java} | 13 +- .../{packets/send => }/S_PacketSendEvent.java | 21 +- ...vent.java => S_PacketSendFailedEvent.java} | 13 +- .../S_UnknownObjectReceivedEvent.java | 13 +- .../connection/S_IncomingConnectionEvent.java | 34 -- ...S_IncomingConnectionThreadFailedEvent.java | 31 -- .../packets/send/S_PacketFailedSendEvent.java | 34 -- .../events/state/server/S_StartedEvent.java | 37 --- .../events/state/server/S_StoppedEvent.java | 37 --- .../me/finn/unlegitlibrary/utils/Logger.java | 2 +- 42 files changed, 498 insertions(+), 1016 deletions(-) create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedFailedEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendFailedEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_UnknownObjectReceivedEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientConnectedEvent.java create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientDisconnectedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketFailedReceivedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketReceivedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_UnknownObjectReceivedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketFailedSendEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketSendEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ConnectedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_DisconnectedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ReceiveThreadFailedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/packets/SystemPacket.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientDisconnectPacket.java rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{state/connection/S_ConnectionHandlerConnectedEvent.java => ConnectionHandlerConnectedEvent.java} (61%) rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{state/connection/S_ConnectionHandlerDisconnectedEvent.java => ConnectionHandlerDisconnectedEvent.java} (60%) create mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/IncomingConnectionEvent.java rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{packets/received => }/S_PacketReceivedEvent.java (83%) rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{packets/received/S_PacketFailedReceivedEvent.java => S_PacketReceivedFailedEvent.java} (59%) rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{packets/send => }/S_PacketSendEvent.java (56%) rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{packets/received/S_ReceiveThreadFailedEvent.java => S_PacketSendFailedEvent.java} (53%) rename src/main/java/me/finn/unlegitlibrary/network/system/server/events/{packets/received => }/S_UnknownObjectReceivedEvent.java (71%) delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionThreadFailedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketFailedSendEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StartedEvent.java delete mode 100644 src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StoppedEvent.java diff --git a/pom.xml b/pom.xml index e0cc23b..16f0139 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.finn.unlegitlibrary unlegitlibrary - 1.5.12 + 1.5.13 1.8 diff --git a/src/main/java/me/finn/unlegitlibrary/addon/AddonLoader.java b/src/main/java/me/finn/unlegitlibrary/addon/AddonLoader.java index 842894a..7db9032 100644 --- a/src/main/java/me/finn/unlegitlibrary/addon/AddonLoader.java +++ b/src/main/java/me/finn/unlegitlibrary/addon/AddonLoader.java @@ -85,12 +85,12 @@ public class AddonLoader extends DefaultMethodsOverrider { addons.forEach(this::disableAddon); } - public final void registerEventListener(Addon addon, Class eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { + public final void registerEventListener(Addon addon, EventListener eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { if (!addons.contains(addon)) return; addon.registerEventListener(eventListener); } - public final void unregisterEventListener(Addon addon, Class eventListener) { + public final void unregisterEventListener(Addon addon, EventListener eventListener) { if (!addons.contains(addon)) return; addon.unregisterEventListener(eventListener); } diff --git a/src/main/java/me/finn/unlegitlibrary/addon/impl/Addon.java b/src/main/java/me/finn/unlegitlibrary/addon/impl/Addon.java index 9f8503c..5aafdb0 100644 --- a/src/main/java/me/finn/unlegitlibrary/addon/impl/Addon.java +++ b/src/main/java/me/finn/unlegitlibrary/addon/impl/Addon.java @@ -40,11 +40,11 @@ public abstract class Addon { eventManager.executeEvent(event); } - public final void registerEventListener(Class eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { + public final void registerEventListener(EventListener eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { eventManager.registerListener(eventListener); } - public final void unregisterEventListener(Class eventListener) { + public final void unregisterEventListener(EventListener eventListener) { eventManager.unregisterListener(eventListener); } diff --git a/src/main/java/me/finn/unlegitlibrary/command/Command.java b/src/main/java/me/finn/unlegitlibrary/command/Command.java index 97cf9d8..172adc7 100644 --- a/src/main/java/me/finn/unlegitlibrary/command/Command.java +++ b/src/main/java/me/finn/unlegitlibrary/command/Command.java @@ -8,6 +8,7 @@ package me.finn.unlegitlibrary.command; +import javax.management.InstanceAlreadyExistsException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -29,13 +30,17 @@ public abstract class Command { return new ArrayList<>(aliases); } - public Command(CommandManager commandManager, String name, String description, String usage, List permissions, List aliases) { + public Command(CommandManager commandManager, String name, String description, String usage, List permissions, List aliases) throws InstanceAlreadyExistsException { this.commandManager = commandManager; this.name = name; this.description = description; this.usage = usage; this.permissions = permissions; this.aliases = aliases; + + boolean exists = commandManager.getCommand(name) != null; + if (!exists) for (String alias : aliases) exists = commandManager.getCommand(alias) != null; + if (exists) throw new InstanceAlreadyExistsException("Command with this name or some alias alreadx exists!"); } public abstract void execute(CommandExecutor commandExecutor, String label, String[] args); diff --git a/src/main/java/me/finn/unlegitlibrary/event/EventManager.java b/src/main/java/me/finn/unlegitlibrary/event/EventManager.java index c3c4799..9663125 100644 --- a/src/main/java/me/finn/unlegitlibrary/event/EventManager.java +++ b/src/main/java/me/finn/unlegitlibrary/event/EventManager.java @@ -21,14 +21,12 @@ import java.util.Map; public class EventManager extends DefaultMethodsOverrider { private final HashMap, HashMap>> registeredListener = new HashMap<>(); - private final HashMap, Object> eventListeners = new HashMap<>(); + private final HashMap eventListeners = new HashMap<>(); - public final void registerListener(Class listenerClass) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { + public final void registerListener(EventListener listenerClass) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { if (isListenerRegistered(listenerClass)) return; - Object clazz = listenerClass.getDeclaredConstructor().newInstance(); - - for (Method method : clazz.getClass().getDeclaredMethods()) { + for (Method method : listenerClass.getClass().getDeclaredMethods()) { Listener listener = method.getAnnotation(Listener.class); if (listener == null) continue; @@ -39,16 +37,16 @@ public class EventManager extends DefaultMethodsOverrider { HashMap> list = registeredListener.getOrDefault(eventClass, new HashMap<>()); HashMap set = list.getOrDefault(listener.priority(), new HashMap<>()); - set.put(clazz, method); + set.put(listenerClass, method); list.put(listener.priority(), set); registeredListener.put(eventClass, list); } } - eventListeners.put(listenerClass, clazz); + eventListeners.put(listenerClass, listenerClass); } - public synchronized final void unregisterListener(Class listenerClass) { + public synchronized final void unregisterListener(EventListener listenerClass) { if (!isListenerRegistered(listenerClass)) return; Object clazz = eventListeners.get(listenerClass); @@ -95,7 +93,7 @@ public class EventManager extends DefaultMethodsOverrider { eventListeners.remove(listenerClass); } - public final boolean isListenerRegistered(Class listenerClass) { + public final boolean isListenerRegistered(EventListener listenerClass) { return eventListeners.containsKey(listenerClass); } @@ -103,7 +101,7 @@ public class EventManager extends DefaultMethodsOverrider { HashMap> list = registeredListener.getOrDefault(event.getClass(), new HashMap<>()); list.getOrDefault(EventPriority.LOWEST, new HashMap<>()).forEach((k, v) -> { - if (!isListenerRegistered((Class) k.getClass())) return; + if (!isListenerRegistered((EventListener) k)) return; try { v.invoke(k, event); @@ -113,7 +111,7 @@ public class EventManager extends DefaultMethodsOverrider { }); list.getOrDefault(EventPriority.LOW, new HashMap<>()).forEach((k, v) -> { - if (!isListenerRegistered((Class) k.getClass())) return; + if (!isListenerRegistered((EventListener) k)) return; try { v.invoke(k, event); @@ -123,7 +121,7 @@ public class EventManager extends DefaultMethodsOverrider { }); list.getOrDefault(EventPriority.NORMAL, new HashMap<>()).forEach((k, v) -> { - if (!isListenerRegistered((Class) k.getClass())) return; + if (!isListenerRegistered((EventListener) k)) return; try { v.invoke(k, event); @@ -133,7 +131,7 @@ public class EventManager extends DefaultMethodsOverrider { }); list.getOrDefault(EventPriority.HIGH, new HashMap<>()).forEach((k, v) -> { - if (!isListenerRegistered((Class) k.getClass())) return; + if (!isListenerRegistered((EventListener) k)) return; try { v.invoke(k, event); @@ -143,7 +141,7 @@ public class EventManager extends DefaultMethodsOverrider { }); list.getOrDefault(EventPriority.HIGHEST, new HashMap<>()).forEach((k, v) -> { - if (!isListenerRegistered((Class) k.getClass())) return; + if (!isListenerRegistered((EventListener) k)) return; try { v.invoke(k, event); 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 ea3366f..6b622b0 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -9,17 +9,12 @@ package me.finn.unlegitlibrary.network.system.client; import me.finn.unlegitlibrary.event.EventManager; -import me.finn.unlegitlibrary.network.system.client.events.received.C_PacketFailedReceivedEvent; -import me.finn.unlegitlibrary.network.system.client.events.received.C_PacketReceivedEvent; -import me.finn.unlegitlibrary.network.system.client.events.received.C_UnknownObjectReceivedEvent; import me.finn.unlegitlibrary.network.system.client.events.send.C_PacketFailedSendEvent; -import me.finn.unlegitlibrary.network.system.client.events.send.C_PacketSendEvent; -import me.finn.unlegitlibrary.network.system.client.events.state.C_ConnectedEvent; import me.finn.unlegitlibrary.network.system.client.events.state.C_DisconnectedEvent; -import me.finn.unlegitlibrary.network.system.client.events.state.C_ReceiveThreadFailedEvent; +import me.finn.unlegitlibrary.network.system.packets.impl.ClientDisconnectPacket; +import me.finn.unlegitlibrary.network.system.client.events.*; import me.finn.unlegitlibrary.network.system.packets.Packet; import me.finn.unlegitlibrary.network.system.packets.PacketHandler; -import me.finn.unlegitlibrary.network.system.packets.impl.ClientDisconnectPacket; import me.finn.unlegitlibrary.network.system.packets.impl.ClientIDPacket; import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider; import me.finn.unlegitlibrary.utils.Logger; @@ -27,12 +22,11 @@ import me.finn.unlegitlibrary.utils.Logger; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import java.lang.reflect.InvocationTargetException; +import java.net.ConnectException; import java.net.Socket; import java.net.SocketException; -public class NetworkClient extends DefaultMethodsOverrider { - +public final class NetworkClient { public static class ClientBuilder extends DefaultMethodsOverrider { private String host; private int port; @@ -45,7 +39,7 @@ public class NetworkClient extends DefaultMethodsOverrider { private int reconnectDelay = 3000; private int timeout = 0; - public final NetworkClient build() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + public final NetworkClient build() { return new NetworkClient(host, port ,packetHandler, eventManager, logger, maxReconnectAttempts, reconnectDelay, timeout); } @@ -97,18 +91,58 @@ public class NetworkClient extends DefaultMethodsOverrider { private final EventManager eventManager; private final Logger logger; + private Socket socket; + private int timeout; + + private ObjectOutputStream outputStream; + private ObjectInputStream inputStream; + + private int clientID; + private int currentAttempts; private final int maxReconnectAttempts; private final int reconnectDelay; - private Socket socket; - private int timeout; - private ObjectOutputStream outputStream; - private ObjectInputStream inputStream; - private int clientID = -1; - public final Thread receiveThread = new Thread(this::receive); + private final Thread receiveThread = new Thread(this::receive); - private NetworkClient(String host, int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int reconnectAttempts, int reconnectDelay, int timeout) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + public int getClientID() { + return clientID; + } + + public Socket getSocket() { + return socket; + } + + public EventManager getEventManager() { + return eventManager; + } + + public PacketHandler getPacketHandler() { + return packetHandler; + } + + public Logger getLogger() { + return logger; + } + + public int getPort() { + return port; + } + + public String getHost() { + return host; + } + + public boolean isConnected() { + return socket != null && socket.isConnected() && !socket.isClosed() && socket.isBound() + && receiveThread.isAlive() && !receiveThread.isInterrupted(); + } + + public boolean isAutoReconnectEnabled() { + return maxReconnectAttempts != 0; + } + + private NetworkClient(String host, int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int reconnectAttempts, int reconnectDelay, int timeout) { this.host = host; this.port = port; this.clientID = -1; @@ -123,112 +157,10 @@ public class NetworkClient extends DefaultMethodsOverrider { this.currentAttempts = 0; this.packetHandler.setClientInstance(this); - this.packetHandler.registerPacket(ClientDisconnectPacket.class); - this.packetHandler.registerPacket(ClientIDPacket.class); + this.packetHandler.registerPacket(new ClientIDPacket()); } - public final int getClientID() { - return clientID; - } - - public final Socket getSocket() { - return socket; - } - - public final EventManager getEventManager() { - return eventManager; - } - - public final String getHost() { - return host; - } - - public final int getPort() { - return port; - } - - public final ObjectInputStream getInputStream() { - return inputStream; - } - - public final ObjectOutputStream getOutputStream() { - return outputStream; - } - - public final PacketHandler getPacketHandler() { - return packetHandler; - } - - public final boolean isAutoReconnectEnabled() { - return maxReconnectAttempts != 0; - } - - public final Logger getLogger() { - return logger; - } - - public final boolean isConnected() { - return socket != null && socket.isConnected() && !socket.isClosed() && socket.isBound() - && receiveThread.isAlive() && !receiveThread.isInterrupted(); - } - - public final Thread getReceiveThread() { - return receiveThread; - } - - public final void setClientID(int clientID) { - if (this.clientID == -1) { - this.clientID = clientID; - eventManager.executeEvent(new C_ConnectedEvent(this)); - } - } - - public synchronized boolean disconnect(boolean sendDisconnectPacket) { - if (logger == null) System.out.println("Disconnecting from server..."); - else logger.info("Disconnecting from server..."); - - receiveThread.interrupt(); - - if (isConnected()) { - if (sendDisconnectPacket) sendPacket(new ClientDisconnectPacket(clientID, true)); - - try { - outputStream.close(); - inputStream.close(); - socket.close(); - } catch (IOException exception) { - if (logger == null) System.err.println("Failed to close socket: " + exception.getMessage()); - else logger.exception("Failed to close socket", exception); - } - } - - outputStream = null; - inputStream = null; - socket = null; - - clientID = -1; - currentAttempts = 0; - - eventManager.executeEvent(new C_DisconnectedEvent(this)); - if (logger == null) System.out.println("Disconnected from server"); - else logger.info("Disconnected from serverß"); - - if (maxReconnectAttempts != 0) { - try { - Thread.sleep(reconnectDelay); - } catch (InterruptedException sleepThreadException) { - if (logger == null) System.err.println("Reconnect exception: " + sleepThreadException.getMessage()); - else logger.exception("Reconnect exception", sleepThreadException); - } - - currentAttempts++; - if (currentAttempts <= maxReconnectAttempts || maxReconnectAttempts < 0) return connect(); - } - - return true; - } - - public synchronized final boolean connect() { + public synchronized boolean connect() throws ConnectException { if (isConnected()) return false; if (logger == null) System.out.println("Trying to connect to " + host + ":" + port + "..."); @@ -248,10 +180,12 @@ public class NetworkClient extends DefaultMethodsOverrider { if (logger == null) System.out.println("Connected to " + host + ":" + port + " (Attempts: " + currentAttempts + ")"); else logger.info("Connected to " + host + ":" + port + " (Attempts: " + currentAttempts + ")"); + eventManager.executeEvent(new ClientConnectedEvent(this)); + currentAttempts = 0; return true; } catch (IOException exception) { - if (maxReconnectAttempts != 0) { + if (isAutoReconnectEnabled()) { try { Thread.sleep(reconnectDelay); } catch (InterruptedException sleepThreadException) { @@ -260,32 +194,11 @@ public class NetworkClient extends DefaultMethodsOverrider { } currentAttempts++; - if (currentAttempts <= maxReconnectAttempts || maxReconnectAttempts < 0) return connect(); + if (currentAttempts < maxReconnectAttempts || maxReconnectAttempts < 0) return connect(); } - - if (logger == null) System.err.println("Failed to connect to " + host + ":" + port + ": " + exception.getMessage()); - else logger.exception("Failed to connect to " + host + ":" + port, exception); } - return false; - } - - public final boolean sendPacket(Packet packet) { - if (!isConnected()) return false; - - try { - if (packetHandler.sendPacket(packet, outputStream)) { - eventManager.executeEvent(new C_PacketSendEvent(this, packet)); - return true; - } else eventManager.executeEvent(new C_PacketFailedSendEvent(this, packet, null)); - } catch (IOException | ClassNotFoundException exception) { - if (logger == null) System.err.println("Failed to send packet: " + exception.getMessage()); - else logger.exception("Failed to connect to send packet", exception); - - eventManager.executeEvent(new C_PacketFailedSendEvent(this, packet, exception)); - } - - return false; + throw new ConnectException("Failed to connect to " + host + ":" + port); } private void receive() { @@ -296,23 +209,87 @@ public class NetworkClient extends DefaultMethodsOverrider { Object received = inputStream.readObject(); if (received instanceof Integer) { - int id = (Integer) received; - Packet packet = packetHandler.getPacketByID(id); - if (packetHandler.handlePacket(id, packet, inputStream)) - eventManager.executeEvent(new C_PacketReceivedEvent(this, packet)); - else eventManager.executeEvent(new C_PacketFailedReceivedEvent(this, packet, null)); + int packetID = (Integer) received; + if (packetHandler.isPacketIDRegistered(packetID)) { + Packet packet = packetHandler.getPacketByID(packetID); + if (packetHandler.handlePacket(packetID, packet, inputStream)) + eventManager.executeEvent(new C_PacketReceivedEvent(this, packet)); + else + eventManager.executeEvent(new C_PacketReceivedFailedEvent(this, packet)); + } else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received)); } else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received)); } catch (SocketException ignored) { - disconnect(false); + try { + disconnect(); + } catch (ConnectException exception) { + exception.printStackTrace(); + } + } catch (Exception exception) { + exception.printStackTrace(); return; - } catch (IOException | ClassNotFoundException exception) { - if (logger == null) System.err.println("Receive thread failed: " + exception.getMessage()); - else logger.exception("Receive thread failed", exception); + } + } + } - eventManager.executeEvent(new C_ReceiveThreadFailedEvent(this, exception)); + + public void setClientID(int clientID) { + if (this.clientID == -1) this.clientID = clientID; + } + + public boolean sendPacket(Packet packet) throws IOException, ClassNotFoundException { + if (!isConnected()) return false; + + try { + if (packetHandler.sendPacket(packet, outputStream)) { + eventManager.executeEvent(new C_PacketSendEvent(this, packet)); + return true; + } else { + eventManager.executeEvent(new C_PacketSendFailedEvent(this, packet)); + return false; + } + } catch (IOException | ClassNotFoundException exception) { + throw exception; + } + } + + public synchronized boolean disconnect() throws ConnectException { + boolean wasConnected = isConnected(); + + if (wasConnected) { + if (logger == null) System.out.println("Disconnecting from server..."); + else logger.info("Disconnecting from server..."); + } + + if (receiveThread.isAlive() && !receiveThread.isInterrupted()) receiveThread.interrupt(); + + if (wasConnected) { + try { + outputStream.close(); + inputStream.close(); + socket.close(); + } catch (IOException exception) { + if (logger == null) System.err.println("Failed to close socket: " + exception.getMessage()); + else logger.exception("Failed to close socket", exception); } } - disconnect(false); + outputStream = null; + inputStream = null; + socket = null; + + currentAttempts = 0; + + if (wasConnected) { + if (logger == null) System.out.println("Disconnected from server"); + else logger.info("Disconnected from server"); + } + + eventManager.executeEvent(new ClientDisconnectedEvent(this)); + + clientID = -1; + if (isAutoReconnectEnabled() && (currentAttempts < maxReconnectAttempts || maxReconnectAttempts < 0)) + return connect(); + + return true; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedEvent.java new file mode 100644 index 0000000..8a02a57 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.Packet; + +public class C_PacketReceivedEvent extends Event { + public final NetworkClient networkClient; + public final Packet packet; + + public C_PacketReceivedEvent(NetworkClient networkClient, Packet packet) { + this.networkClient = networkClient; + this.packet = packet; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedFailedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedFailedEvent.java new file mode 100644 index 0000000..1aa0c44 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketReceivedFailedEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.Packet; + +public class C_PacketReceivedFailedEvent extends Event { + public final NetworkClient networkClient; + public final Packet packet; + + public C_PacketReceivedFailedEvent(NetworkClient networkClient, Packet packet) { + this.networkClient = networkClient; + this.packet = packet; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendEvent.java new file mode 100644 index 0000000..9698df8 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.Packet; + +public class C_PacketSendEvent extends Event { + public final NetworkClient networkClient; + public final Packet packet; + + public C_PacketSendEvent(NetworkClient networkClient, Packet packet) { + this.networkClient = networkClient; + this.packet = packet; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendFailedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendFailedEvent.java new file mode 100644 index 0000000..4c414ce --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_PacketSendFailedEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.Packet; + +public class C_PacketSendFailedEvent extends Event { + public final NetworkClient networkClient; + public final Packet packet; + + public C_PacketSendFailedEvent(NetworkClient networkClient, Packet packet) { + this.networkClient = networkClient; + this.packet = packet; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_UnknownObjectReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_UnknownObjectReceivedEvent.java new file mode 100644 index 0000000..b13b0d7 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/C_UnknownObjectReceivedEvent.java @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; + +public class C_UnknownObjectReceivedEvent extends Event { + public final NetworkClient networkClient; + public final Object received; + + public C_UnknownObjectReceivedEvent(NetworkClient networkClient, Object received) { + this.networkClient = networkClient; + this.received = received; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientConnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientConnectedEvent.java new file mode 100644 index 0000000..930a87a --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientConnectedEvent.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; + +public class ClientConnectedEvent extends Event { + public final NetworkClient client; + + public ClientConnectedEvent(NetworkClient client) { + this.client = client; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientDisconnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientDisconnectedEvent.java new file mode 100644 index 0000000..a741d15 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/ClientDisconnectedEvent.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.client.events; + +import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.client.NetworkClient; + +public class ClientDisconnectedEvent extends Event { + public final NetworkClient client; + + public ClientDisconnectedEvent(NetworkClient client) { + this.client = client; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketFailedReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketFailedReceivedEvent.java deleted file mode 100644 index b184bbe..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketFailedReceivedEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.received; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.Packet; - -public class C_PacketFailedReceivedEvent extends Event { - - public final NetworkClient client; - public final Packet packet; - public final Exception exception; - - public C_PacketFailedReceivedEvent(NetworkClient client, Packet packet, Exception exception) { - this.client = client; - this.packet = packet; - this.exception = exception; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketReceivedEvent.java deleted file mode 100644 index a4aa5e4..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_PacketReceivedEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.received; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.Packet; - -public class C_PacketReceivedEvent extends Event { - - public final NetworkClient client; - public final Packet packet; - - public C_PacketReceivedEvent(NetworkClient client, Packet packet) { - this.client = client; - this.packet = packet; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_UnknownObjectReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_UnknownObjectReceivedEvent.java deleted file mode 100644 index 6511725..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/received/C_UnknownObjectReceivedEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.received; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; - -public class C_UnknownObjectReceivedEvent extends Event { - - public final NetworkClient client; - public final Object received; - - public C_UnknownObjectReceivedEvent(NetworkClient client, Object received) { - this.client = client; - this.received = received; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketFailedSendEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketFailedSendEvent.java deleted file mode 100644 index 3eac412..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketFailedSendEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.send; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.Packet; - -public class C_PacketFailedSendEvent extends Event { - - public final NetworkClient client; - public final Packet packet; - public final Exception exception; - - public C_PacketFailedSendEvent(NetworkClient client, Packet packet, Exception exception) { - this.client = client; - this.packet = packet; - this.exception = exception; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketSendEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketSendEvent.java deleted file mode 100644 index 9ce8a39..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/send/C_PacketSendEvent.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.send; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.Packet; - -public class C_PacketSendEvent extends Event { - - public final NetworkClient client; - public final Packet packet; - - public C_PacketSendEvent(NetworkClient client, Packet packet) { - this.client = client; - this.packet = packet; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ConnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ConnectedEvent.java deleted file mode 100644 index 3841e6b..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ConnectedEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.state; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; - -public class C_ConnectedEvent extends Event { - - public final NetworkClient client; - - public C_ConnectedEvent(NetworkClient client) { - this.client = client; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_DisconnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_DisconnectedEvent.java deleted file mode 100644 index 6da6726..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_DisconnectedEvent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.state; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; - -public class C_DisconnectedEvent extends Event { - - public final NetworkClient client; - - public C_DisconnectedEvent(NetworkClient client) { - this.client = client; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ReceiveThreadFailedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ReceiveThreadFailedEvent.java deleted file mode 100644 index 69e07f9..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/client/events/state/C_ReceiveThreadFailedEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.client.events.state; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; - -public class C_ReceiveThreadFailedEvent extends Event { - - public final NetworkClient client; - public final Exception exception; - - public C_ReceiveThreadFailedEvent(NetworkClient client, Exception exception) { - this.client = client; - this.exception = exception; - } - - @Override - protected final Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public final boolean equals(Object obj) { - return super.equals(obj); - } - - @Override - public final String toString() { - return super.toString(); - } - - @Override - public final int hashCode() { - return super.hashCode(); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/packets/Packet.java b/src/main/java/me/finn/unlegitlibrary/network/system/packets/Packet.java index 8e1291a..9825e90 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/packets/Packet.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/packets/Packet.java @@ -1,13 +1,5 @@ /* - * 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 - */ - -/* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -35,5 +27,4 @@ public abstract class Packet { public abstract void write(PacketHandler packetHandler, ObjectOutputStream outputStream) throws IOException, ClassNotFoundException; public abstract void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException; -} - +} \ No newline at end of file diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/packets/PacketHandler.java b/src/main/java/me/finn/unlegitlibrary/network/system/packets/PacketHandler.java index ea19536..9490cf6 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/packets/PacketHandler.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/packets/PacketHandler.java @@ -1,13 +1,5 @@ /* - * 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 - */ - -/* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -23,13 +15,12 @@ import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; -public class PacketHandler extends DefaultMethodsOverrider { +public final class PacketHandler extends DefaultMethodsOverrider { - private final Map> packets = new HashMap<>(); + private final Map packets = new HashMap<>(); private NetworkClient clientInstance; private NetworkServer serverInstance; @@ -55,24 +46,15 @@ public class PacketHandler extends DefaultMethodsOverrider { } public final Packet getPacketByID(int id) { - Class packetClass = packets.get(id); - if (packetClass == null) return null; - try { - return packetClass.getDeclaredConstructor().newInstance(); - } catch (InstantiationException | InvocationTargetException | IllegalAccessException | - NoSuchMethodException exception) { - return null; - } + return packets.get(id); } - public final boolean registerPacket(Class packetClass) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { - Packet packet = packetClass.getDeclaredConstructor().newInstance(); + public final boolean registerPacket(Packet packet) { int id = packet.getPacketID(); - if (!(packet instanceof SystemPacket) && isPacketIDRegistered(id)) return false; - else if (isPacketIDRegistered(id)) packets.remove(id); + if (isPacketIDRegistered(id)) return false; - packets.put(id, packetClass); + packets.put(id, packet); return true; } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/packets/SystemPacket.java b/src/main/java/me/finn/unlegitlibrary/network/system/packets/SystemPacket.java deleted file mode 100644 index db40b33..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/packets/SystemPacket.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.packets; - -public abstract class SystemPacket extends Packet { - protected SystemPacket(int id) { - super(id); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientDisconnectPacket.java b/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientDisconnectPacket.java deleted file mode 100644 index 5fed1b3..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientDisconnectPacket.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 me.finn.unlegitlibrary.network.system.packets.impl; - -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.PacketHandler; -import me.finn.unlegitlibrary.network.system.packets.SystemPacket; -import me.finn.unlegitlibrary.network.system.server.NetworkServer; - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -public class ClientDisconnectPacket extends SystemPacket { - public ClientDisconnectPacket() { - super(-2); - } - - private int clientID; - private boolean fromClient; - - public ClientDisconnectPacket(int clientID, boolean fromClient) { - this(); - this.clientID = clientID; - this.fromClient = fromClient; - } - - @Override - public void write(PacketHandler packetHandler, ObjectOutputStream outputStream) throws IOException, ClassNotFoundException { - outputStream.writeBoolean(fromClient); - outputStream.writeInt(clientID); - } - - @Override - public void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException { - fromClient = outputStream.readBoolean(); - clientID = outputStream.readInt(); - - if (fromClient) packetHandler.getServerInstance().getConnectionHandlerByID(clientID).disconnect(false); - else packetHandler.getClientInstance().disconnect(false); - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientIDPacket.java b/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientIDPacket.java index 848acbe..2afec3b 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientIDPacket.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/packets/impl/ClientIDPacket.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -8,18 +8,16 @@ package me.finn.unlegitlibrary.network.system.packets.impl; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; +import me.finn.unlegitlibrary.network.system.packets.Packet; import me.finn.unlegitlibrary.network.system.packets.PacketHandler; -import me.finn.unlegitlibrary.network.system.packets.SystemPacket; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -public class ClientIDPacket extends SystemPacket { - +public class ClientIDPacket extends Packet { public ClientIDPacket() { - super(-1); + super(0); } private int clientID; @@ -36,7 +34,6 @@ public class ClientIDPacket extends SystemPacket { @Override public void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException { - clientID = outputStream.readInt(); packetHandler.getClientInstance().setClientID(clientID); } } 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 bb3e556..f965398 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -8,17 +8,9 @@ package me.finn.unlegitlibrary.network.system.server; -import me.finn.unlegitlibrary.network.system.packets.impl.ClientIDPacket; -import me.finn.unlegitlibrary.network.system.packets.impl.ClientDisconnectPacket; -import me.finn.unlegitlibrary.network.system.server.events.packets.received.S_PacketFailedReceivedEvent; -import me.finn.unlegitlibrary.network.system.server.events.packets.received.S_PacketReceivedEvent; -import me.finn.unlegitlibrary.network.system.server.events.packets.received.S_ReceiveThreadFailedEvent; -import me.finn.unlegitlibrary.network.system.server.events.packets.received.S_UnknownObjectReceivedEvent; -import me.finn.unlegitlibrary.network.system.server.events.packets.send.S_PacketFailedSendEvent; -import me.finn.unlegitlibrary.network.system.server.events.packets.send.S_PacketSendEvent; -import me.finn.unlegitlibrary.network.system.server.events.state.connection.S_ConnectionHandlerConnectedEvent; -import me.finn.unlegitlibrary.network.system.server.events.state.connection.S_ConnectionHandlerDisconnectedEvent; import me.finn.unlegitlibrary.network.system.packets.Packet; +import me.finn.unlegitlibrary.network.system.packets.impl.ClientIDPacket; +import me.finn.unlegitlibrary.network.system.server.events.*; import java.io.IOException; import java.io.ObjectInputStream; @@ -28,7 +20,7 @@ import java.net.SocketException; public class ConnectionHandler { - private NetworkServer server; + public final NetworkServer networkServer; private Socket socket; private int clientID; @@ -36,8 +28,17 @@ public class ConnectionHandler { private ObjectInputStream inputStream; public final Thread receiveThread = new Thread(this::receive); - public ConnectionHandler(NetworkServer server, Socket socket, int clientID) throws IOException { - this.server = server; + public int getClientID() { + return clientID; + } + + public final boolean isConnected() { + return networkServer.isRunning() && socket != null && socket.isConnected() && !socket.isClosed() && socket.isBound() + && receiveThread.isAlive() && !receiveThread.isInterrupted(); + } + + public ConnectionHandler(NetworkServer server, Socket socket, int clientID) throws IOException, ClassNotFoundException { + this.networkServer = server; this.socket = socket; this.clientID = clientID; @@ -46,64 +47,29 @@ public class ConnectionHandler { receiveThread.start(); - sendPacket(new ClientIDPacket(clientID)); + sendPacket(new ClientIDPacket()); + networkServer.getEventManager().executeEvent(new ConnectionHandlerConnectedEvent(this)); } - public final int getClientID() { - return clientID; - } + public synchronized boolean disconnect() { + boolean wasConnected = isConnected(); - public final NetworkServer getServer() { - return server; - } - - public final Socket getSocket() { - return socket; - } - - public final Thread getReceiveThread() { - return receiveThread; - } - - public final boolean isConnected() { - return server.isRunning() && socket != null && socket.isConnected() && !socket.isClosed() && socket.isBound() - && receiveThread.isAlive() && !receiveThread.isInterrupted(); - } - - public final boolean sendPacket(Packet packet) { - if (!isConnected()) return false; - - try { - if (server.getPacketHandler().sendPacket(packet, outputStream)) { - server.getEventManager().executeEvent(new S_PacketSendEvent(this, packet)); - return true; - } else server.getEventManager().executeEvent(new S_PacketFailedSendEvent(this, packet, null)); - } catch (IOException | ClassNotFoundException exception) { - if (server.getLogger() == null) System.err.println("Failed to send packet: " + exception.getMessage()); - else server.getLogger().exception("Failed to connect to send packet", exception); - - server.getEventManager().executeEvent(new S_PacketFailedSendEvent(this, packet, exception)); + if (wasConnected) { + if (networkServer.getLogger() == null) + System.out.println("Client ID '" + clientID + "' is disconnecting from server..."); + else networkServer.getLogger().info("Client ID '" + clientID + "' is disconnecting from server..."); } - return false; - } - - public synchronized boolean disconnect(boolean sendDisconnectPacket) { - 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(); - - if (isConnected()) { - if (sendDisconnectPacket) sendPacket(new ClientDisconnectPacket(clientID, false)); + if (receiveThread.isAlive() && !receiveThread.isInterrupted()) receiveThread.interrupt(); + if (wasConnected) { try { outputStream.close(); inputStream.close(); socket.close(); } catch (IOException 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); + if (networkServer.getLogger() == null) System.err.println("Client ID '" + clientID + "' failed to close socket: " + exception.getMessage()); + else networkServer.getLogger().exception("Client ID '" + clientID + "' failed to close socket", exception); } } @@ -111,16 +77,31 @@ public class ConnectionHandler { inputStream = null; socket = null; - server.getConnectionHandlers().remove(this); + networkServer.getConnectionHandlers().remove(this); + + if (wasConnected) { + if (networkServer.getLogger() == null) + System.out.println("Client ID '" + clientID + "' disconnected from server"); + else networkServer.getLogger().info("Client ID '" + clientID + "' disconnected from server"); + } + + networkServer.getEventManager().executeEvent(new ConnectionHandlerDisconnectedEvent(this)); clientID = -1; - - server.getEventManager().executeEvent(new S_ConnectionHandlerDisconnectedEvent(this)); - 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; } + public boolean sendPacket(Packet packet) throws IOException, ClassNotFoundException { + if (!isConnected()) return false; + + if (networkServer.getPacketHandler().sendPacket(packet, outputStream)) { + networkServer.getEventManager().executeEvent(new S_PacketSendEvent(packet, this)); + return true; + } else { + networkServer.getEventManager().executeEvent(new S_PacketSendFailedEvent(packet, this)); + return false; + } + } + private void receive() { if (!isConnected()) return; @@ -129,23 +110,21 @@ public class ConnectionHandler { Object received = inputStream.readObject(); if (received instanceof Integer) { - int id = (Integer) received; - Packet packet = server.getPacketHandler().getPacketByID(id); - if (server.getPacketHandler().handlePacket(id, packet, inputStream)) - 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)); + int packetID = (Integer) received; + if (networkServer.getPacketHandler().isPacketIDRegistered(packetID)) { + Packet packet = networkServer.getPacketHandler().getPacketByID(packetID); + if (networkServer.getPacketHandler().handlePacket(packetID, packet, inputStream)) + networkServer.getEventManager().executeEvent(new S_PacketReceivedEvent(this, packet)); + else + networkServer.getEventManager().executeEvent(new S_PacketReceivedFailedEvent(this, packet)); + } else networkServer.getEventManager().executeEvent(new S_UnknownObjectReceivedEvent(received, this)); + } else networkServer.getEventManager().executeEvent(new S_UnknownObjectReceivedEvent(received, this)); } catch (SocketException ignored) { - disconnect(false); + disconnect(); + } catch (Exception exception) { + exception.printStackTrace(); return; - } catch (IOException | ClassNotFoundException 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)); } } - - disconnect(false); } } 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 b094467..823ea9e 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 @@ -9,29 +9,21 @@ package me.finn.unlegitlibrary.network.system.server; import me.finn.unlegitlibrary.event.EventManager; -import me.finn.unlegitlibrary.network.system.client.NetworkClient; -import me.finn.unlegitlibrary.network.system.packets.impl.ClientDisconnectPacket; -import me.finn.unlegitlibrary.network.system.packets.impl.ClientIDPacket; -import me.finn.unlegitlibrary.network.system.server.events.connection.S_IncomingConnectionEvent; -import me.finn.unlegitlibrary.network.system.server.events.connection.S_IncomingConnectionThreadFailedEvent; -import me.finn.unlegitlibrary.network.system.server.events.state.connection.S_ConnectionHandlerConnectedEvent; -import me.finn.unlegitlibrary.network.system.server.events.state.server.S_StartedEvent; -import me.finn.unlegitlibrary.network.system.server.events.state.server.S_StoppedEvent; import me.finn.unlegitlibrary.network.system.packets.Packet; import me.finn.unlegitlibrary.network.system.packets.PacketHandler; +import me.finn.unlegitlibrary.network.system.packets.impl.ClientIDPacket; +import me.finn.unlegitlibrary.network.system.server.events.IncomingConnectionEvent; import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider; import me.finn.unlegitlibrary.utils.Logger; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; -public class NetworkServer extends DefaultMethodsOverrider { - +public final class NetworkServer { public static class ServerBuilder extends DefaultMethodsOverrider { private int port; @@ -43,7 +35,7 @@ public class NetworkServer extends DefaultMethodsOverrider { private int restartDelay = 3000; private int timeout = 0; - public final NetworkServer build() throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + public final NetworkServer build() { return new NetworkServer(port, packetHandler, eventManager, logger, maxRestartAttempts, restartDelay, timeout); } @@ -82,7 +74,7 @@ public class NetworkServer extends DefaultMethodsOverrider { return this; } } - + private final int port; private final PacketHandler packetHandler; @@ -99,44 +91,23 @@ public class NetworkServer extends DefaultMethodsOverrider { private ServerSocket serverSocket; - private NetworkServer(int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int maxRestartAttempts, int restartDelay, int timeout) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { - this.port = port; - this.timeout = timeout; - - this.packetHandler = packetHandler; - this.eventManager = eventManager; - this.logger = logger; - - this.maxRestartAttempts = maxRestartAttempts; - this.restartDelay = restartDelay; - this.currentAttempts = 0; - - this.packetHandler.setServerInstance(this); - this.packetHandler.registerPacket(ClientDisconnectPacket.class); - this.packetHandler.registerPacket(ClientIDPacket.class); - } - - public final Logger getLogger() { + public Logger getLogger() { return logger; } - public final EventManager getEventManager() { + public EventManager getEventManager() { return eventManager; } - public final int getPort() { + public int getPort() { return port; } - public final ServerSocket getServerSocket() { - return serverSocket; - } - - public final PacketHandler getPacketHandler() { + public PacketHandler getPacketHandler() { return packetHandler; } - public final List getConnectionHandlers() { + public List getConnectionHandlers() { return connectionHandlers; } @@ -154,24 +125,20 @@ public class NetworkServer extends DefaultMethodsOverrider { return null; } - public synchronized final boolean stop() { - if (!isRunning()) return false; + private NetworkServer(int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int maxRestartAttempts, int restartDelay, int timeout) { + this.port = port; + this.timeout = timeout; - if (logger == null) System.out.println("Trying to stop server..."); - else logger.info("Trying to stop server..."); + this.packetHandler = packetHandler; + this.eventManager = eventManager; + this.logger = logger; - new ArrayList<>(connectionHandlers).forEach(connectionHandler -> connectionHandler.disconnect(true)); - connectionHandlers.clear(); + this.maxRestartAttempts = maxRestartAttempts; + this.restartDelay = restartDelay; + this.currentAttempts = 0; - incomingConnectionThread.interrupt(); - serverSocket = null; - currentAttempts = 0; - - if (logger == null) System.out.println("Server stopped"); - else logger.info("Server stopped"); - - eventManager.executeEvent(new S_StoppedEvent(this)); - return true; + this.packetHandler.setServerInstance(this); + this.packetHandler.registerPacket(new ClientIDPacket()); } public synchronized final boolean start() { @@ -191,8 +158,6 @@ public class NetworkServer extends DefaultMethodsOverrider { else logger.info("Started at port " + port + " (Attempts: " + currentAttempts + ")"); currentAttempts = 0; - - eventManager.executeEvent(new S_StartedEvent(this)); return true; } catch (IOException exception) { if (maxRestartAttempts != 0) { @@ -214,21 +179,17 @@ public class NetworkServer extends DefaultMethodsOverrider { return false; } - public final boolean sendPacket(int clientID, Packet packet) { - return getConnectionHandlerByID(clientID).sendPacket(packet); - } - - public final boolean sendPacket(Packet packet, int clientID) { - return sendPacket(clientID, packet); - } - - public final Thread getIncomingConnectionThread() { - return incomingConnectionThread; - } - - public final boolean broadcastPacket(Packet packet) { + public boolean broadcastPacket(Packet packet) { AtomicBoolean toReturn = new AtomicBoolean(false); - connectionHandlers.forEach(connectionHandler -> toReturn.set(connectionHandler.sendPacket(packet))); + connectionHandlers.forEach(connectionHandler -> { + try { + if (!toReturn.get()) return; + toReturn.set(connectionHandler.sendPacket(packet)); + } catch (IOException | ClassNotFoundException e) { + toReturn.set(false); + } + }); + return toReturn.get(); } @@ -244,25 +205,36 @@ public class NetworkServer extends DefaultMethodsOverrider { if (logger == null) System.out.println("Accepted connection from " + socket.getRemoteSocketAddress()); else logger.info("Accepted connection from " + socket.getRemoteSocketAddress()); - S_IncomingConnectionEvent incomingConnectionEvent = new S_IncomingConnectionEvent(this, socket); + IncomingConnectionEvent incomingConnectionEvent = new IncomingConnectionEvent(this, socket); + eventManager.executeEvent(incomingConnectionEvent); if (incomingConnectionEvent.isCancelled()) { socket.close(); - continue; + return; } ConnectionHandler connectionHandler = new ConnectionHandler(this, socket, connectionHandlers.size() + 1); connectionHandlers.add(connectionHandler); - eventManager.executeEvent(new S_ConnectionHandlerConnectedEvent(connectionHandler)); } - } catch (IOException exception) { - if (logger == null) System.err.println("Accept exception: " + exception.getMessage()); - else logger.exception("Accept exception", exception); - - eventManager.executeEvent(new S_IncomingConnectionThreadFailedEvent(this, exception)); + } catch (IOException | ClassNotFoundException exception) { + exception.printStackTrace(); } + } - stop(); + public final boolean sendPacket(int clientID, Packet packet) throws IOException, ClassNotFoundException { + return getConnectionHandlerByID(clientID).sendPacket(packet); + } + + public final boolean sendPacket(Packet packet, int clientID) throws IOException, ClassNotFoundException { + return sendPacket(clientID, packet); + } + + public static void main(String[] args) { + EventManager eventManager = new EventManager(); + PacketHandler packetHandler = new PacketHandler(); + + NetworkServer networkServer = new ServerBuilder().setMaxReconnectAttempts(2).setEventManager(eventManager).setPacketHandler(packetHandler).setPort(1918).build(); + networkServer.start(); } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerConnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerConnectedEvent.java similarity index 61% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerConnectedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerConnectedEvent.java index 8f10754..931fdba 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerConnectedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerConnectedEvent.java @@ -1,21 +1,20 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.state.connection; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; -public class S_ConnectionHandlerConnectedEvent extends Event { - +public final class ConnectionHandlerConnectedEvent extends Event { public final ConnectionHandler connectionHandler; - public S_ConnectionHandlerConnectedEvent(ConnectionHandler connectionHandler) { + public ConnectionHandlerConnectedEvent(ConnectionHandler connectionHandler) { this.connectionHandler = connectionHandler; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerDisconnectedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerDisconnectedEvent.java similarity index 60% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerDisconnectedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerDisconnectedEvent.java index 91ce0d3..4438345 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/connection/S_ConnectionHandlerDisconnectedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/ConnectionHandlerDisconnectedEvent.java @@ -1,21 +1,20 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.state.connection; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; -public class S_ConnectionHandlerDisconnectedEvent extends Event { - +public final class ConnectionHandlerDisconnectedEvent extends Event { public final ConnectionHandler connectionHandler; - public S_ConnectionHandlerDisconnectedEvent(ConnectionHandler connectionHandler) { + public ConnectionHandlerDisconnectedEvent(ConnectionHandler connectionHandler) { this.connectionHandler = connectionHandler; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/IncomingConnectionEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/IncomingConnectionEvent.java new file mode 100644 index 0000000..42fa801 --- /dev/null +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/IncomingConnectionEvent.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events; + +import me.finn.unlegitlibrary.event.impl.CancellableEvent; +import me.finn.unlegitlibrary.network.system.server.NetworkServer; + +import java.net.Socket; + +public class IncomingConnectionEvent extends CancellableEvent { + public final NetworkServer server; + public final Socket socket; + + public IncomingConnectionEvent(NetworkServer server, Socket socket) { + this.server = server; + this.socket = socket; + } +} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedEvent.java similarity index 83% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketReceivedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedEvent.java index 3288569..9147cc7 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketReceivedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedEvent.java @@ -1,19 +1,18 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.packets.received; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; import me.finn.unlegitlibrary.network.system.packets.Packet; +import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; public class S_PacketReceivedEvent extends Event { - public final ConnectionHandler connectionHandler; public final Packet packet; diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketFailedReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedFailedEvent.java similarity index 59% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketFailedReceivedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedFailedEvent.java index 20abdb5..36c1453 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_PacketFailedReceivedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketReceivedFailedEvent.java @@ -1,26 +1,23 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.packets.received; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; import me.finn.unlegitlibrary.network.system.packets.Packet; +import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; -public class S_PacketFailedReceivedEvent extends Event { - +public class S_PacketReceivedFailedEvent extends Event { public final ConnectionHandler connectionHandler; public final Packet packet; - public final Exception exception; - public S_PacketFailedReceivedEvent(ConnectionHandler connectionHandler, Packet packet, Exception exception) { + public S_PacketReceivedFailedEvent(ConnectionHandler connectionHandler, Packet packet) { this.connectionHandler = connectionHandler; this.packet = packet; - this.exception = exception; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketSendEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendEvent.java similarity index 56% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketSendEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendEvent.java index 1932d13..227a595 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketSendEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendEvent.java @@ -1,32 +1,23 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 */ -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.packets.send; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; import me.finn.unlegitlibrary.network.system.packets.Packet; +import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; public class S_PacketSendEvent extends Event { - - public final ConnectionHandler connectionHandler; public final Packet packet; + public final ConnectionHandler connectionHandler; - public S_PacketSendEvent(ConnectionHandler connectionHandler, Packet packet) { - this.connectionHandler = connectionHandler; + public S_PacketSendEvent(Packet packet, ConnectionHandler connectionHandler) { this.packet = packet; + this.connectionHandler = connectionHandler; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_ReceiveThreadFailedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendFailedEvent.java similarity index 53% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_ReceiveThreadFailedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendFailedEvent.java index ee1f678..24649e1 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_ReceiveThreadFailedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_PacketSendFailedEvent.java @@ -1,22 +1,23 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.packets.received; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; +import me.finn.unlegitlibrary.network.system.packets.Packet; import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; -public class S_ReceiveThreadFailedEvent extends Event { +public class S_PacketSendFailedEvent extends Event { + public final Packet packet; public final ConnectionHandler connectionHandler; - public final Exception exception; - public S_ReceiveThreadFailedEvent(ConnectionHandler connectionHandler, Exception exception) { + public S_PacketSendFailedEvent(Packet packet, ConnectionHandler connectionHandler) { + this.packet = packet; this.connectionHandler = connectionHandler; - this.exception = exception; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_UnknownObjectReceivedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_UnknownObjectReceivedEvent.java similarity index 71% rename from src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_UnknownObjectReceivedEvent.java rename to src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_UnknownObjectReceivedEvent.java index 8fefaf9..47b816f 100644 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/received/S_UnknownObjectReceivedEvent.java +++ b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/S_UnknownObjectReceivedEvent.java @@ -1,22 +1,23 @@ /* - * Copyright (C) 2024 UnlegitDqrk - All Rights Reserved + * Copyright (C) 2025 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 me.finn.unlegitlibrary.network.system.server.events.packets.received; +package me.finn.unlegitlibrary.network.system.server.events; import me.finn.unlegitlibrary.event.impl.Event; import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; public class S_UnknownObjectReceivedEvent extends Event { - public final ConnectionHandler connectionHandler; - public final Object received; - public S_UnknownObjectReceivedEvent(ConnectionHandler connectionHandler, Object received) { - this.connectionHandler = connectionHandler; + public final Object received; + public final ConnectionHandler connectionHandler; + + public S_UnknownObjectReceivedEvent(Object received, ConnectionHandler connectionHandler) { this.received = received; + this.connectionHandler = connectionHandler; } } diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionEvent.java deleted file mode 100644 index ec27f96..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - */ - -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.connection; - -import me.finn.unlegitlibrary.event.impl.CancellableEvent; -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.NetworkServer; - -import java.net.Socket; - -public class S_IncomingConnectionEvent extends CancellableEvent { - - public final NetworkServer server; - public final Socket socket; - - public S_IncomingConnectionEvent(NetworkServer server, Socket socket) { - this.server = server; - this.socket = socket; - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionThreadFailedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionThreadFailedEvent.java deleted file mode 100644 index a352c18..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/connection/S_IncomingConnectionThreadFailedEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 - */ - -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.connection; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.NetworkServer; - -public class S_IncomingConnectionThreadFailedEvent extends Event { - - public final NetworkServer server; - public final Exception exception; - - public S_IncomingConnectionThreadFailedEvent(NetworkServer server, Exception exception) { - this.server = server; - this.exception = exception; - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketFailedSendEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketFailedSendEvent.java deleted file mode 100644 index 936c113..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/packets/send/S_PacketFailedSendEvent.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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 - */ - -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.packets.send; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; -import me.finn.unlegitlibrary.network.system.packets.Packet; - -public class S_PacketFailedSendEvent extends Event { - - public final ConnectionHandler connectionHandler; - public final Packet packet; - public final Exception exception; - - public S_PacketFailedSendEvent(ConnectionHandler connectionHandler, Packet packet, Exception exception) { - this.connectionHandler = connectionHandler; - this.packet = packet; - this.exception = exception; - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StartedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StartedEvent.java deleted file mode 100644 index b6b2b26..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StartedEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - */ - -/* - * 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 - */ - -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.state.server; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.NetworkServer; - -public class S_StartedEvent extends Event { - - public final NetworkServer server; - - public S_StartedEvent(NetworkServer server) { - this.server = server; - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StoppedEvent.java b/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StoppedEvent.java deleted file mode 100644 index ec17bd7..0000000 --- a/src/main/java/me/finn/unlegitlibrary/network/system/server/events/state/server/S_StoppedEvent.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 - */ - -/* - * 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 - */ - -/* - * 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 me.finn.unlegitlibrary.network.system.server.events.state.server; - -import me.finn.unlegitlibrary.event.impl.Event; -import me.finn.unlegitlibrary.network.system.server.NetworkServer; - -public class S_StoppedEvent extends Event { - - public final NetworkServer server; - - public S_StoppedEvent(NetworkServer server) { - this.server = server; - } -} diff --git a/src/main/java/me/finn/unlegitlibrary/utils/Logger.java b/src/main/java/me/finn/unlegitlibrary/utils/Logger.java index 4f2a9f0..b1fbb17 100644 --- a/src/main/java/me/finn/unlegitlibrary/utils/Logger.java +++ b/src/main/java/me/finn/unlegitlibrary/utils/Logger.java @@ -189,7 +189,7 @@ public final class Logger { } } - public final void debug(String debug) throws IOException { + public final void debug(String debug) { // Get current date and time SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date date = new Date();