NoIssue: Clean-up
This commit is contained in:
@@ -3,6 +3,8 @@ package com.r35157.nenjim.kicker.impl.ref;
|
|||||||
import com.r35157.nenjim.kicker.Kicker;
|
import com.r35157.nenjim.kicker.Kicker;
|
||||||
import com.r35157.nenjim.kicker.NenjimProcess;
|
import com.r35157.nenjim.kicker.NenjimProcess;
|
||||||
import com.r35157.nenjim.hubd.Context;
|
import com.r35157.nenjim.hubd.Context;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -11,16 +13,14 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
|
|
||||||
public class KickerImpl implements Kicker {
|
public class KickerImpl implements Kicker {
|
||||||
|
|
||||||
private final ConcurrentHashMap<Integer, NenjimProcess> processes = new ConcurrentHashMap<>();
|
|
||||||
private final ConcurrentHashMap<Integer, Thread> processThreads = new ConcurrentHashMap<>();
|
|
||||||
private final AtomicInteger nextProcessId = new AtomicInteger(1);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startProcess(@NotNull String fqInterfaceName) {
|
public void startProcess(@NotNull String fqInterfaceName) {
|
||||||
ClassLoader loader = ClassLoader.getSystemClassLoader();
|
ClassLoader loader = ClassLoader.getSystemClassLoader();
|
||||||
int processId = nextProcessId.getAndIncrement();
|
int processId = nextProcessId.getAndIncrement();
|
||||||
|
|
||||||
Thread t = Thread.startVirtualThread(() -> {
|
final NenjimProcess proc;
|
||||||
|
final String procName;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class<?> clazz = loader.loadClass(fqInterfaceName);
|
Class<?> clazz = loader.loadClass(fqInterfaceName);
|
||||||
|
|
||||||
@@ -28,23 +28,27 @@ public class KickerImpl implements Kicker {
|
|||||||
throw new IllegalArgumentException("'" + fqInterfaceName + "' does NOT implement NenjimProcess");
|
throw new IllegalArgumentException("'" + fqInterfaceName + "' does NOT implement NenjimProcess");
|
||||||
}
|
}
|
||||||
|
|
||||||
NenjimProcess proc = (NenjimProcess) clazz.getDeclaredConstructor().newInstance();
|
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);
|
processes.put(processId, proc);
|
||||||
|
|
||||||
// TODO: lav dine rigtige typer her
|
Context context = new Context(); log.warn("TODO: Set the Context here when we have one!");
|
||||||
var context = new Context() {};
|
proc.setContext(context);
|
||||||
//proc.setNenjimProcessContext(context);
|
proc.setHub(null); log.warn("TODO: Set the HUB here when we have one!");
|
||||||
//proc.setNenjimHub(this);
|
|
||||||
|
|
||||||
//Thread.currentThread().setName(proc.getProcessName());
|
|
||||||
//System.out.println(" Starter Nenjim process '" + proc.getProcessName() + "' (#" + processId + ")");
|
|
||||||
|
|
||||||
|
Thread t = Thread.ofVirtual()
|
||||||
|
.name(procName)
|
||||||
|
.start(() -> {
|
||||||
|
try {
|
||||||
|
log.info("Starting process '{}' (#{})...", procName, processId);
|
||||||
proc.run();
|
proc.run();
|
||||||
|
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
System.err.println(" Process #" + processId + " crashed: " + e);
|
log.error("Process '{}' (#{}) crashed!", procName, processId, e);
|
||||||
e.printStackTrace();
|
|
||||||
} finally {
|
} finally {
|
||||||
processThreads.remove(processId);
|
processThreads.remove(processId);
|
||||||
processes.remove(processId);
|
processes.remove(processId);
|
||||||
@@ -62,4 +66,10 @@ public class KickerImpl implements Kicker {
|
|||||||
@Override
|
@Override
|
||||||
public void noop() {
|
public void noop() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Logger log = LogManager.getLogger(KickerImpl.class);
|
||||||
|
|
||||||
|
private final ConcurrentHashMap<Integer, NenjimProcess> processes = new ConcurrentHashMap<>();
|
||||||
|
private final ConcurrentHashMap<Integer, Thread> processThreads = new ConcurrentHashMap<>();
|
||||||
|
private final AtomicInteger nextProcessId = new AtomicInteger(1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user