NoIssue: Incorrect interface fix
This commit is contained in:
@@ -2,17 +2,61 @@ 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.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
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
|
||||
public void startProcess(String s) {
|
||||
public void startProcess(@NotNull String fqInterfaceName) {
|
||||
ClassLoader loader = ClassLoader.getSystemClassLoader();
|
||||
int processId = nextProcessId.getAndIncrement();
|
||||
|
||||
Thread t = Thread.startVirtualThread(() -> {
|
||||
try {
|
||||
Class<?> clazz = loader.loadClass(fqInterfaceName);
|
||||
|
||||
if (!NenjimProcess.class.isAssignableFrom(clazz)) {
|
||||
throw new IllegalArgumentException("'" + fqInterfaceName + "' does NOT implement NenjimProcess");
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
processThreads.put(processId, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HashMap<Integer, NenjimProcess> getRunningProcesses() {
|
||||
return null;
|
||||
public @NotNull HashMap<Integer, NenjimProcess> getRunningProcesses() {
|
||||
return new HashMap<>(processes);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user