From d33b3036a072c411ac17e0d4a50b276821c8fb1057f79e895ffc90687289be71 Mon Sep 17 00:00:00 2001 From: Minimons Date: Wed, 28 Jan 2026 11:57:55 +0100 Subject: [PATCH] NoIssue: Clean-up --- .../nenjim/kicker/impl/ref/KickerImpl.java | 72 +++++++++++-------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/r35157/nenjim/kicker/impl/ref/KickerImpl.java b/src/main/java/com/r35157/nenjim/kicker/impl/ref/KickerImpl.java index 4f2a314..e6acf61 100644 --- a/src/main/java/com/r35157/nenjim/kicker/impl/ref/KickerImpl.java +++ b/src/main/java/com/r35157/nenjim/kicker/impl/ref/KickerImpl.java @@ -3,6 +3,8 @@ package com.r35157.nenjim.kicker.impl.ref; import com.r35157.nenjim.kicker.Kicker; import com.r35157.nenjim.kicker.NenjimProcess; import com.r35157.nenjim.hubd.Context; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import java.util.HashMap; @@ -11,45 +13,47 @@ import java.util.concurrent.atomic.AtomicInteger; public class KickerImpl implements Kicker { - private final ConcurrentHashMap processes = new ConcurrentHashMap<>(); - private final ConcurrentHashMap processThreads = new ConcurrentHashMap<>(); - private final AtomicInteger nextProcessId = new AtomicInteger(1); - @Override public void startProcess(@NotNull String fqInterfaceName) { ClassLoader loader = ClassLoader.getSystemClassLoader(); int processId = nextProcessId.getAndIncrement(); - Thread t = Thread.startVirtualThread(() -> { - try { - Class clazz = loader.loadClass(fqInterfaceName); + final NenjimProcess proc; + final String procName; - if (!NenjimProcess.class.isAssignableFrom(clazz)) { - throw new IllegalArgumentException("'" + fqInterfaceName + "' does NOT implement NenjimProcess"); - } + try { + Class clazz = loader.loadClass(fqInterfaceName); - NenjimProcess proc = (NenjimProcess) clazz.getDeclaredConstructor().newInstance(); - - processes.put(processId, proc); - - // TODO: lav dine rigtige typer her - var context = new Context() {}; - //proc.setNenjimProcessContext(context); - //proc.setNenjimHub(this); - - //Thread.currentThread().setName(proc.getProcessName()); - //System.out.println(" Starter Nenjim process '" + proc.getProcessName() + "' (#" + processId + ")"); - - proc.run(); - - } catch (Throwable e) { - System.err.println(" Process #" + processId + " crashed: " + e); - e.printStackTrace(); - } finally { - processThreads.remove(processId); - processes.remove(processId); + if (!NenjimProcess.class.isAssignableFrom(clazz)) { + throw new IllegalArgumentException("'" + fqInterfaceName + "' does NOT implement NenjimProcess"); } - }); + + proc = (NenjimProcess) clazz.getDeclaredConstructor().newInstance(); + procName = proc.getName(); + } catch (Throwable e) { + log.error("Failed to create process '{}' (#{}).", fqInterfaceName, processId, e); + return; + } + + processes.put(processId, proc); + + Context context = new Context(); log.warn("TODO: Set the Context here when we have one!"); + proc.setContext(context); + proc.setHub(null); log.warn("TODO: Set the HUB here when we have one!"); + + Thread t = Thread.ofVirtual() + .name(procName) + .start(() -> { + try { + log.info("Starting process '{}' (#{})...", procName, processId); + proc.run(); + } catch (Throwable e) { + log.error("Process '{}' (#{}) crashed!", procName, processId, e); + } finally { + processThreads.remove(processId); + processes.remove(processId); + } + }); processThreads.put(processId, t); } @@ -62,4 +66,10 @@ public class KickerImpl implements Kicker { @Override public void noop() { } + + private static final Logger log = LogManager.getLogger(KickerImpl.class); + + private final ConcurrentHashMap processes = new ConcurrentHashMap<>(); + private final ConcurrentHashMap processThreads = new ConcurrentHashMap<>(); + private final AtomicInteger nextProcessId = new AtomicInteger(1); }