Bug fixes and new network system

This commit is contained in:
2025-01-07 09:49:21 +01:00
parent e366122c79
commit 09e0f2a461
42 changed files with 498 additions and 1016 deletions

View File

@@ -6,7 +6,7 @@
<groupId>me.finn.unlegitlibrary</groupId> <groupId>me.finn.unlegitlibrary</groupId>
<artifactId>unlegitlibrary</artifactId> <artifactId>unlegitlibrary</artifactId>
<version>1.5.12</version> <version>1.5.13</version>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>

View File

@@ -85,12 +85,12 @@ public class AddonLoader extends DefaultMethodsOverrider {
addons.forEach(this::disableAddon); addons.forEach(this::disableAddon);
} }
public final void registerEventListener(Addon addon, Class<? extends EventListener> eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { public final void registerEventListener(Addon addon, EventListener eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
if (!addons.contains(addon)) return; if (!addons.contains(addon)) return;
addon.registerEventListener(eventListener); addon.registerEventListener(eventListener);
} }
public final void unregisterEventListener(Addon addon, Class<? extends EventListener> eventListener) { public final void unregisterEventListener(Addon addon, EventListener eventListener) {
if (!addons.contains(addon)) return; if (!addons.contains(addon)) return;
addon.unregisterEventListener(eventListener); addon.unregisterEventListener(eventListener);
} }

View File

@@ -40,11 +40,11 @@ public abstract class Addon {
eventManager.executeEvent(event); eventManager.executeEvent(event);
} }
public final void registerEventListener(Class<? extends EventListener> eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException { public final void registerEventListener(EventListener eventListener) throws InvocationTargetException, InstantiationException, IllegalAccessException, NoSuchMethodException {
eventManager.registerListener(eventListener); eventManager.registerListener(eventListener);
} }
public final void unregisterEventListener(Class<? extends EventListener> eventListener) { public final void unregisterEventListener(EventListener eventListener) {
eventManager.unregisterListener(eventListener); eventManager.unregisterListener(eventListener);
} }

View File

@@ -8,6 +8,7 @@
package me.finn.unlegitlibrary.command; package me.finn.unlegitlibrary.command;
import javax.management.InstanceAlreadyExistsException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -29,13 +30,17 @@ public abstract class Command {
return new ArrayList<>(aliases); return new ArrayList<>(aliases);
} }
public Command(CommandManager commandManager, String name, String description, String usage, List<CommandPermission> permissions, List<String> aliases) { public Command(CommandManager commandManager, String name, String description, String usage, List<CommandPermission> permissions, List<String> aliases) throws InstanceAlreadyExistsException {
this.commandManager = commandManager; this.commandManager = commandManager;
this.name = name; this.name = name;
this.description = description; this.description = description;
this.usage = usage; this.usage = usage;
this.permissions = permissions; this.permissions = permissions;
this.aliases = aliases; 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); public abstract void execute(CommandExecutor commandExecutor, String label, String[] args);

View File

@@ -21,14 +21,12 @@ import java.util.Map;
public class EventManager extends DefaultMethodsOverrider { public class EventManager extends DefaultMethodsOverrider {
private final HashMap<Class<? extends Event>, HashMap<EventPriority, HashMap<Object, Method>>> registeredListener = new HashMap<>(); private final HashMap<Class<? extends Event>, HashMap<EventPriority, HashMap<Object, Method>>> registeredListener = new HashMap<>();
private final HashMap<Class<? extends EventListener>, Object> eventListeners = new HashMap<>(); private final HashMap<EventListener, Object> eventListeners = new HashMap<>();
public final void registerListener(Class<? extends EventListener> listenerClass) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { public final void registerListener(EventListener listenerClass) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
if (isListenerRegistered(listenerClass)) return; if (isListenerRegistered(listenerClass)) return;
Object clazz = listenerClass.getDeclaredConstructor().newInstance(); for (Method method : listenerClass.getClass().getDeclaredMethods()) {
for (Method method : clazz.getClass().getDeclaredMethods()) {
Listener listener = method.getAnnotation(Listener.class); Listener listener = method.getAnnotation(Listener.class);
if (listener == null) continue; if (listener == null) continue;
@@ -39,16 +37,16 @@ public class EventManager extends DefaultMethodsOverrider {
HashMap<EventPriority, HashMap<Object, Method>> list = registeredListener.getOrDefault(eventClass, new HashMap<>()); HashMap<EventPriority, HashMap<Object, Method>> list = registeredListener.getOrDefault(eventClass, new HashMap<>());
HashMap<Object, Method> set = list.getOrDefault(listener.priority(), new HashMap<>()); HashMap<Object, Method> set = list.getOrDefault(listener.priority(), new HashMap<>());
set.put(clazz, method); set.put(listenerClass, method);
list.put(listener.priority(), set); list.put(listener.priority(), set);
registeredListener.put(eventClass, list); registeredListener.put(eventClass, list);
} }
} }
eventListeners.put(listenerClass, clazz); eventListeners.put(listenerClass, listenerClass);
} }
public synchronized final void unregisterListener(Class<? extends EventListener> listenerClass) { public synchronized final void unregisterListener(EventListener listenerClass) {
if (!isListenerRegistered(listenerClass)) return; if (!isListenerRegistered(listenerClass)) return;
Object clazz = eventListeners.get(listenerClass); Object clazz = eventListeners.get(listenerClass);
@@ -95,7 +93,7 @@ public class EventManager extends DefaultMethodsOverrider {
eventListeners.remove(listenerClass); eventListeners.remove(listenerClass);
} }
public final boolean isListenerRegistered(Class<? extends EventListener> listenerClass) { public final boolean isListenerRegistered(EventListener listenerClass) {
return eventListeners.containsKey(listenerClass); return eventListeners.containsKey(listenerClass);
} }
@@ -103,7 +101,7 @@ public class EventManager extends DefaultMethodsOverrider {
HashMap<EventPriority, HashMap<Object, Method>> list = registeredListener.getOrDefault(event.getClass(), new HashMap<>()); HashMap<EventPriority, HashMap<Object, Method>> list = registeredListener.getOrDefault(event.getClass(), new HashMap<>());
list.getOrDefault(EventPriority.LOWEST, new HashMap<>()).forEach((k, v) -> { list.getOrDefault(EventPriority.LOWEST, new HashMap<>()).forEach((k, v) -> {
if (!isListenerRegistered((Class<? extends EventListener>) k.getClass())) return; if (!isListenerRegistered((EventListener) k)) return;
try { try {
v.invoke(k, event); v.invoke(k, event);
@@ -113,7 +111,7 @@ public class EventManager extends DefaultMethodsOverrider {
}); });
list.getOrDefault(EventPriority.LOW, new HashMap<>()).forEach((k, v) -> { list.getOrDefault(EventPriority.LOW, new HashMap<>()).forEach((k, v) -> {
if (!isListenerRegistered((Class<? extends EventListener>) k.getClass())) return; if (!isListenerRegistered((EventListener) k)) return;
try { try {
v.invoke(k, event); v.invoke(k, event);
@@ -123,7 +121,7 @@ public class EventManager extends DefaultMethodsOverrider {
}); });
list.getOrDefault(EventPriority.NORMAL, new HashMap<>()).forEach((k, v) -> { list.getOrDefault(EventPriority.NORMAL, new HashMap<>()).forEach((k, v) -> {
if (!isListenerRegistered((Class<? extends EventListener>) k.getClass())) return; if (!isListenerRegistered((EventListener) k)) return;
try { try {
v.invoke(k, event); v.invoke(k, event);
@@ -133,7 +131,7 @@ public class EventManager extends DefaultMethodsOverrider {
}); });
list.getOrDefault(EventPriority.HIGH, new HashMap<>()).forEach((k, v) -> { list.getOrDefault(EventPriority.HIGH, new HashMap<>()).forEach((k, v) -> {
if (!isListenerRegistered((Class<? extends EventListener>) k.getClass())) return; if (!isListenerRegistered((EventListener) k)) return;
try { try {
v.invoke(k, event); v.invoke(k, event);
@@ -143,7 +141,7 @@ public class EventManager extends DefaultMethodsOverrider {
}); });
list.getOrDefault(EventPriority.HIGHEST, new HashMap<>()).forEach((k, v) -> { list.getOrDefault(EventPriority.HIGHEST, new HashMap<>()).forEach((k, v) -> {
if (!isListenerRegistered((Class<? extends EventListener>) k.getClass())) return; if (!isListenerRegistered((EventListener) k)) return;
try { try {
v.invoke(k, event); v.invoke(k, event);

View File

@@ -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 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 * 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; package me.finn.unlegitlibrary.network.system.client;
import me.finn.unlegitlibrary.event.EventManager; import me.finn.unlegitlibrary.event.EventManager;
import me.finn.unlegitlibrary.network.system.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_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_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.Packet;
import me.finn.unlegitlibrary.network.system.packets.PacketHandler; 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.network.system.packets.impl.ClientIDPacket;
import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider; import me.finn.unlegitlibrary.utils.DefaultMethodsOverrider;
import me.finn.unlegitlibrary.utils.Logger; import me.finn.unlegitlibrary.utils.Logger;
@@ -27,12 +22,11 @@ import me.finn.unlegitlibrary.utils.Logger;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException; import java.net.ConnectException;
import java.net.Socket; import java.net.Socket;
import java.net.SocketException; import java.net.SocketException;
public class NetworkClient extends DefaultMethodsOverrider { public final class NetworkClient {
public static class ClientBuilder extends DefaultMethodsOverrider { public static class ClientBuilder extends DefaultMethodsOverrider {
private String host; private String host;
private int port; private int port;
@@ -45,7 +39,7 @@ public class NetworkClient extends DefaultMethodsOverrider {
private int reconnectDelay = 3000; private int reconnectDelay = 3000;
private int timeout = 0; 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); 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 EventManager eventManager;
private final Logger logger; private final Logger logger;
private Socket socket;
private int timeout;
private ObjectOutputStream outputStream;
private ObjectInputStream inputStream;
private int clientID;
private int currentAttempts; private int currentAttempts;
private final int maxReconnectAttempts; private final int maxReconnectAttempts;
private final int reconnectDelay; private final int reconnectDelay;
private Socket socket; private final Thread receiveThread = new Thread(this::receive);
private int timeout;
private ObjectOutputStream outputStream;
private ObjectInputStream inputStream;
private int clientID = -1;
public 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.host = host;
this.port = port; this.port = port;
this.clientID = -1; this.clientID = -1;
@@ -123,112 +157,10 @@ public class NetworkClient extends DefaultMethodsOverrider {
this.currentAttempts = 0; this.currentAttempts = 0;
this.packetHandler.setClientInstance(this); this.packetHandler.setClientInstance(this);
this.packetHandler.registerPacket(ClientDisconnectPacket.class); this.packetHandler.registerPacket(new ClientIDPacket());
this.packetHandler.registerPacket(ClientIDPacket.class);
} }
public final int getClientID() { public synchronized boolean connect() throws ConnectException {
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() {
if (isConnected()) return false; if (isConnected()) return false;
if (logger == null) System.out.println("Trying to connect to " + host + ":" + port + "..."); 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 + ")"); if (logger == null) System.out.println("Connected to " + host + ":" + port + " (Attempts: " + currentAttempts + ")");
else logger.info("Connected to " + host + ":" + port + " (Attempts: " + currentAttempts + ")"); else logger.info("Connected to " + host + ":" + port + " (Attempts: " + currentAttempts + ")");
eventManager.executeEvent(new ClientConnectedEvent(this));
currentAttempts = 0; currentAttempts = 0;
return true; return true;
} catch (IOException exception) { } catch (IOException exception) {
if (maxReconnectAttempts != 0) { if (isAutoReconnectEnabled()) {
try { try {
Thread.sleep(reconnectDelay); Thread.sleep(reconnectDelay);
} catch (InterruptedException sleepThreadException) { } catch (InterruptedException sleepThreadException) {
@@ -260,32 +194,11 @@ public class NetworkClient extends DefaultMethodsOverrider {
} }
currentAttempts++; 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()); throw new ConnectException("Failed to connect to " + host + ":" + port);
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;
} }
private void receive() { private void receive() {
@@ -296,23 +209,87 @@ public class NetworkClient extends DefaultMethodsOverrider {
Object received = inputStream.readObject(); Object received = inputStream.readObject();
if (received instanceof Integer) { if (received instanceof Integer) {
int id = (Integer) received; int packetID = (Integer) received;
Packet packet = packetHandler.getPacketByID(id); if (packetHandler.isPacketIDRegistered(packetID)) {
if (packetHandler.handlePacket(id, packet, inputStream)) Packet packet = packetHandler.getPacketByID(packetID);
if (packetHandler.handlePacket(packetID, packet, inputStream))
eventManager.executeEvent(new C_PacketReceivedEvent(this, packet)); eventManager.executeEvent(new C_PacketReceivedEvent(this, packet));
else eventManager.executeEvent(new C_PacketFailedReceivedEvent(this, packet, null)); else
eventManager.executeEvent(new C_PacketReceivedFailedEvent(this, packet));
} else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received));
} else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received)); } else eventManager.executeEvent(new C_UnknownObjectReceivedEvent(this, received));
} catch (SocketException ignored) { } catch (SocketException ignored) {
disconnect(false); try {
disconnect();
} catch (ConnectException exception) {
exception.printStackTrace();
}
} catch (Exception exception) {
exception.printStackTrace();
return; return;
}
}
}
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) { } catch (IOException | ClassNotFoundException exception) {
if (logger == null) System.err.println("Receive thread failed: " + exception.getMessage()); throw exception;
else logger.exception("Receive thread failed", exception);
eventManager.executeEvent(new C_ReceiveThreadFailedEvent(this, exception));
} }
} }
disconnect(false); 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);
}
}
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;
} }
} }

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -1,13 +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
* See LICENSE-File if exists
*/
/*
* Copyright (C) 2024 UnlegitDqrk - All Rights Reserved
* *
* You are unauthorized to remove this copyright. * 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 * You have to give Credits to the Author in your project and link this GitHub site: https://github.com/UnlegitDqrk
@@ -36,4 +28,3 @@ public abstract class Packet {
public abstract void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException; public abstract void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException;
} }

View File

@@ -1,13 +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
* See LICENSE-File if exists
*/
/*
* Copyright (C) 2024 UnlegitDqrk - All Rights Reserved
* *
* You are unauthorized to remove this copyright. * 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 * 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.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class PacketHandler extends DefaultMethodsOverrider { public final class PacketHandler extends DefaultMethodsOverrider {
private final Map<Integer, Class<? extends Packet>> packets = new HashMap<>(); private final Map<Integer, Packet> packets = new HashMap<>();
private NetworkClient clientInstance; private NetworkClient clientInstance;
private NetworkServer serverInstance; private NetworkServer serverInstance;
@@ -55,24 +46,15 @@ public class PacketHandler extends DefaultMethodsOverrider {
} }
public final Packet getPacketByID(int id) { public final Packet getPacketByID(int id) {
Class<? extends Packet> packetClass = packets.get(id); return packets.get(id);
if (packetClass == null) return null;
try {
return packetClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | InvocationTargetException | IllegalAccessException |
NoSuchMethodException exception) {
return null;
}
} }
public final boolean registerPacket(Class<? extends Packet> packetClass) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { public final boolean registerPacket(Packet packet) {
Packet packet = packetClass.getDeclaredConstructor().newInstance();
int id = packet.getPacketID(); int id = packet.getPacketID();
if (!(packet instanceof SystemPacket) && isPacketIDRegistered(id)) return false; if (isPacketIDRegistered(id)) return false;
else if (isPacketIDRegistered(id)) packets.remove(id);
packets.put(id, packetClass); packets.put(id, packet);
return true; return true;
} }

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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 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 * 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; 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.PacketHandler;
import me.finn.unlegitlibrary.network.system.packets.SystemPacket;
import java.io.IOException; import java.io.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
public class ClientIDPacket extends SystemPacket { public class ClientIDPacket extends Packet {
public ClientIDPacket() { public ClientIDPacket() {
super(-1); super(0);
} }
private int clientID; private int clientID;
@@ -36,7 +34,6 @@ public class ClientIDPacket extends SystemPacket {
@Override @Override
public void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException { public void read(PacketHandler packetHandler, ObjectInputStream outputStream) throws IOException, ClassNotFoundException {
clientID = outputStream.readInt();
packetHandler.getClientInstance().setClientID(clientID); packetHandler.getClientInstance().setClientID(clientID);
} }
} }

View File

@@ -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 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 * 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; 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.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.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
@@ -28,7 +20,7 @@ import java.net.SocketException;
public class ConnectionHandler { public class ConnectionHandler {
private NetworkServer server; public final NetworkServer networkServer;
private Socket socket; private Socket socket;
private int clientID; private int clientID;
@@ -36,8 +28,17 @@ public class ConnectionHandler {
private ObjectInputStream inputStream; private ObjectInputStream inputStream;
public final Thread receiveThread = new Thread(this::receive); public final Thread receiveThread = new Thread(this::receive);
public ConnectionHandler(NetworkServer server, Socket socket, int clientID) throws IOException { public int getClientID() {
this.server = server; 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.socket = socket;
this.clientID = clientID; this.clientID = clientID;
@@ -46,64 +47,29 @@ public class ConnectionHandler {
receiveThread.start(); receiveThread.start();
sendPacket(new ClientIDPacket(clientID)); sendPacket(new ClientIDPacket());
networkServer.getEventManager().executeEvent(new ConnectionHandlerConnectedEvent(this));
} }
public final int getClientID() { public synchronized boolean disconnect() {
return clientID; boolean wasConnected = isConnected();
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...");
} }
public final NetworkServer getServer() { if (receiveThread.isAlive() && !receiveThread.isInterrupted()) receiveThread.interrupt();
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));
}
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 (wasConnected) {
try { try {
outputStream.close(); outputStream.close();
inputStream.close(); inputStream.close();
socket.close(); socket.close();
} catch (IOException exception) { } catch (IOException exception) {
if (server.getLogger() == null) System.err.println("Client ID '" + clientID + "' failed to close socket: " + exception.getMessage()); if (networkServer.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); else networkServer.getLogger().exception("Client ID '" + clientID + "' failed to close socket", exception);
} }
} }
@@ -111,16 +77,31 @@ public class ConnectionHandler {
inputStream = null; inputStream = null;
socket = 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; 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; 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() { private void receive() {
if (!isConnected()) return; if (!isConnected()) return;
@@ -129,23 +110,21 @@ public class ConnectionHandler {
Object received = inputStream.readObject(); Object received = inputStream.readObject();
if (received instanceof Integer) { if (received instanceof Integer) {
int id = (Integer) received; int packetID = (Integer) received;
Packet packet = server.getPacketHandler().getPacketByID(id); if (networkServer.getPacketHandler().isPacketIDRegistered(packetID)) {
if (server.getPacketHandler().handlePacket(id, packet, inputStream)) Packet packet = networkServer.getPacketHandler().getPacketByID(packetID);
server.getEventManager().executeEvent(new S_PacketReceivedEvent(this, packet)); if (networkServer.getPacketHandler().handlePacket(packetID, packet, inputStream))
else server.getEventManager().executeEvent(new S_PacketFailedReceivedEvent(this, packet, null)); networkServer.getEventManager().executeEvent(new S_PacketReceivedEvent(this, packet));
} else server.getEventManager().executeEvent(new S_UnknownObjectReceivedEvent(this, received)); 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) { } catch (SocketException ignored) {
disconnect(false); disconnect();
} catch (Exception exception) {
exception.printStackTrace();
return; 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);
} }
} }

View File

@@ -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 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 * 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; package me.finn.unlegitlibrary.network.system.server;
import me.finn.unlegitlibrary.event.EventManager; import me.finn.unlegitlibrary.event.EventManager;
import me.finn.unlegitlibrary.network.system.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.Packet;
import me.finn.unlegitlibrary.network.system.packets.PacketHandler; 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.DefaultMethodsOverrider;
import me.finn.unlegitlibrary.utils.Logger; import me.finn.unlegitlibrary.utils.Logger;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
public class NetworkServer extends DefaultMethodsOverrider { public final class NetworkServer {
public static class ServerBuilder extends DefaultMethodsOverrider { public static class ServerBuilder extends DefaultMethodsOverrider {
private int port; private int port;
@@ -43,7 +35,7 @@ public class NetworkServer extends DefaultMethodsOverrider {
private int restartDelay = 3000; private int restartDelay = 3000;
private int timeout = 0; 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); return new NetworkServer(port, packetHandler, eventManager, logger, maxRestartAttempts, restartDelay, timeout);
} }
@@ -99,44 +91,23 @@ public class NetworkServer extends DefaultMethodsOverrider {
private ServerSocket serverSocket; private ServerSocket serverSocket;
private NetworkServer(int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int maxRestartAttempts, int restartDelay, int timeout) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { public Logger getLogger() {
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() {
return logger; return logger;
} }
public final EventManager getEventManager() { public EventManager getEventManager() {
return eventManager; return eventManager;
} }
public final int getPort() { public int getPort() {
return port; return port;
} }
public final ServerSocket getServerSocket() { public PacketHandler getPacketHandler() {
return serverSocket;
}
public final PacketHandler getPacketHandler() {
return packetHandler; return packetHandler;
} }
public final List<ConnectionHandler> getConnectionHandlers() { public List<ConnectionHandler> getConnectionHandlers() {
return connectionHandlers; return connectionHandlers;
} }
@@ -154,24 +125,20 @@ public class NetworkServer extends DefaultMethodsOverrider {
return null; return null;
} }
public synchronized final boolean stop() { private NetworkServer(int port, PacketHandler packetHandler, EventManager eventManager, Logger logger, int maxRestartAttempts, int restartDelay, int timeout) {
if (!isRunning()) return false; this.port = port;
this.timeout = timeout;
if (logger == null) System.out.println("Trying to stop server..."); this.packetHandler = packetHandler;
else logger.info("Trying to stop server..."); this.eventManager = eventManager;
this.logger = logger;
new ArrayList<>(connectionHandlers).forEach(connectionHandler -> connectionHandler.disconnect(true)); this.maxRestartAttempts = maxRestartAttempts;
connectionHandlers.clear(); this.restartDelay = restartDelay;
this.currentAttempts = 0;
incomingConnectionThread.interrupt(); this.packetHandler.setServerInstance(this);
serverSocket = null; this.packetHandler.registerPacket(new ClientIDPacket());
currentAttempts = 0;
if (logger == null) System.out.println("Server stopped");
else logger.info("Server stopped");
eventManager.executeEvent(new S_StoppedEvent(this));
return true;
} }
public synchronized final boolean start() { public synchronized final boolean start() {
@@ -191,8 +158,6 @@ public class NetworkServer extends DefaultMethodsOverrider {
else logger.info("Started at port " + port + " (Attempts: " + currentAttempts + ")"); else logger.info("Started at port " + port + " (Attempts: " + currentAttempts + ")");
currentAttempts = 0; currentAttempts = 0;
eventManager.executeEvent(new S_StartedEvent(this));
return true; return true;
} catch (IOException exception) { } catch (IOException exception) {
if (maxRestartAttempts != 0) { if (maxRestartAttempts != 0) {
@@ -214,21 +179,17 @@ public class NetworkServer extends DefaultMethodsOverrider {
return false; return false;
} }
public final boolean sendPacket(int clientID, Packet packet) { public boolean broadcastPacket(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) {
AtomicBoolean toReturn = new AtomicBoolean(false); 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(); return toReturn.get();
} }
@@ -244,25 +205,36 @@ public class NetworkServer extends DefaultMethodsOverrider {
if (logger == null) System.out.println("Accepted connection from " + socket.getRemoteSocketAddress()); if (logger == null) System.out.println("Accepted connection from " + socket.getRemoteSocketAddress());
else logger.info("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); eventManager.executeEvent(incomingConnectionEvent);
if (incomingConnectionEvent.isCancelled()) { if (incomingConnectionEvent.isCancelled()) {
socket.close(); socket.close();
continue; return;
} }
ConnectionHandler connectionHandler = new ConnectionHandler(this, socket, connectionHandlers.size() + 1); ConnectionHandler connectionHandler = new ConnectionHandler(this, socket, connectionHandlers.size() + 1);
connectionHandlers.add(connectionHandler); connectionHandlers.add(connectionHandler);
eventManager.executeEvent(new S_ConnectionHandlerConnectedEvent(connectionHandler));
} }
} catch (IOException exception) { } catch (IOException | ClassNotFoundException exception) {
if (logger == null) System.err.println("Accept exception: " + exception.getMessage()); exception.printStackTrace();
else logger.exception("Accept exception", exception); }
eventManager.executeEvent(new S_IncomingConnectionThreadFailedEvent(this, exception));
} }
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();
} }
} }

View File

@@ -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 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 * 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 * 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.event.impl.Event;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; 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 final ConnectionHandler connectionHandler;
public S_ConnectionHandlerConnectedEvent(ConnectionHandler connectionHandler) { public ConnectionHandlerConnectedEvent(ConnectionHandler connectionHandler) {
this.connectionHandler = connectionHandler; this.connectionHandler = connectionHandler;
} }
} }

View File

@@ -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 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 * 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 * 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.event.impl.Event;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; 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 final ConnectionHandler connectionHandler;
public S_ConnectionHandlerDisconnectedEvent(ConnectionHandler connectionHandler) { public ConnectionHandlerDisconnectedEvent(ConnectionHandler connectionHandler) {
this.connectionHandler = connectionHandler; this.connectionHandler = connectionHandler;
} }
} }

View File

@@ -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;
}
}

View File

@@ -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 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 * 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 * 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.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.packets.Packet;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler;
public class S_PacketReceivedEvent extends Event { public class S_PacketReceivedEvent extends Event {
public final ConnectionHandler connectionHandler; public final ConnectionHandler connectionHandler;
public final Packet packet; public final Packet packet;

View File

@@ -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 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 * 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 * 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.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.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 ConnectionHandler connectionHandler;
public final Packet packet; 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.connectionHandler = connectionHandler;
this.packet = packet; this.packet = packet;
this.exception = exception;
} }
} }

View File

@@ -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 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 * 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 * See LICENSE-File if exists
*/ */
/* package me.finn.unlegitlibrary.network.system.server.events;
* 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.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.packets.Packet;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler;
public class S_PacketSendEvent extends Event { public class S_PacketSendEvent extends Event {
public final ConnectionHandler connectionHandler;
public final Packet packet; public final Packet packet;
public final ConnectionHandler connectionHandler;
public S_PacketSendEvent(ConnectionHandler connectionHandler, Packet packet) { public S_PacketSendEvent(Packet packet, ConnectionHandler connectionHandler) {
this.connectionHandler = connectionHandler;
this.packet = packet; this.packet = packet;
this.connectionHandler = connectionHandler;
} }
} }

View File

@@ -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 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 * 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 * 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.event.impl.Event;
import me.finn.unlegitlibrary.network.system.packets.Packet;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; 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 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.connectionHandler = connectionHandler;
this.exception = exception;
} }
} }

View File

@@ -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 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 * 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 * 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.event.impl.Event;
import me.finn.unlegitlibrary.network.system.server.ConnectionHandler; import me.finn.unlegitlibrary.network.system.server.ConnectionHandler;
public class S_UnknownObjectReceivedEvent extends Event { public class S_UnknownObjectReceivedEvent extends Event {
public final ConnectionHandler connectionHandler;
public final Object received;
public S_UnknownObjectReceivedEvent(ConnectionHandler connectionHandler, Object received) { public final Object received;
this.connectionHandler = connectionHandler; public final ConnectionHandler connectionHandler;
public S_UnknownObjectReceivedEvent(Object received, ConnectionHandler connectionHandler) {
this.received = received; this.received = received;
this.connectionHandler = connectionHandler;
} }
} }

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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 // Get current date and time
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date date = new Date(); Date date = new Date();