REFACTOR: storing Process instead of PID
This commit is contained in:
parent
a7fdb28ed8
commit
f6d5c4ccda
@ -22,6 +22,12 @@ public class ServerController {
|
|||||||
|
|
||||||
private final ServerService serverService;
|
private final ServerService serverService;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@GetMapping("stopAll")
|
||||||
|
public List<ServerDto> stopAll() {
|
||||||
|
return serverService.stopAll();
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@GetMapping("findAll")
|
@GetMapping("findAll")
|
||||||
public List<ServerDto> findAll() {
|
public List<ServerDto> findAll() {
|
||||||
|
|||||||
@ -25,15 +25,15 @@ public class ServerService {
|
|||||||
|
|
||||||
private final ServerConfig serverConfig;
|
private final ServerConfig serverConfig;
|
||||||
|
|
||||||
private final Object lock = new Object();
|
private final Object serversLock = new Object();
|
||||||
|
|
||||||
private List<Server> list = new ArrayList<>();
|
private List<Server> servers = new ArrayList<>();
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void startup() {
|
public void startup() {
|
||||||
final File ROOT = new File(serverConfig.getPath());
|
final File ROOT = new File(serverConfig.getPath());
|
||||||
synchronized (lock) {
|
synchronized (serversLock) {
|
||||||
list = Arrays.stream(Objects.requireNonNull(ROOT.listFiles())).map(this::_tryLoadingFromDir).filter(Optional::isPresent).map(Optional::get).toList();
|
servers = Arrays.stream(Objects.requireNonNull(ROOT.listFiles())).map(this::_tryLoadingFromDir).filter(Optional::isPresent).map(Optional::get).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ public class ServerService {
|
|||||||
private Optional<Server> _tryLoadingFromDir(@NonNull final File directory) {
|
private Optional<Server> _tryLoadingFromDir(@NonNull final File directory) {
|
||||||
try {
|
try {
|
||||||
final Server server = new Server(directory);
|
final Server server = new Server(directory);
|
||||||
list.stream().filter(server::eq).findFirst().ifPresent(old -> server.process = old.process);
|
servers.stream().filter(server::eq).findFirst().ifPresent(old -> server.process = old.process);
|
||||||
return Optional.of(server);
|
return Optional.of(server);
|
||||||
} catch (NoMinecraftServer e) {
|
} catch (NoMinecraftServer e) {
|
||||||
log.warn(e.getMessage());
|
log.warn(e.getMessage());
|
||||||
@ -65,6 +65,7 @@ public class ServerService {
|
|||||||
log.warn("Server is already running: name={}", server.properties.name);
|
log.warn("Server is already running: name={}", server.properties.name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
stopAll();
|
||||||
log.info("Starting server: name={}", server.properties.name);
|
log.info("Starting server: name={}", server.properties.name);
|
||||||
final ProcessBuilder builder = new ProcessBuilder("java", "-jar", "server.jar");
|
final ProcessBuilder builder = new ProcessBuilder("java", "-jar", "server.jar");
|
||||||
builder.directory(server.directory);
|
builder.directory(server.directory);
|
||||||
@ -129,23 +130,30 @@ public class ServerService {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private Server getByName(@NonNull final String name) {
|
private Server getByName(@NonNull final String name) {
|
||||||
synchronized (lock) {
|
synchronized (serversLock) {
|
||||||
return list.stream().filter(server -> server.properties.name.equals(name)).findFirst().orElseThrow();
|
return servers.stream().filter(server -> server.properties.name.equals(name)).findFirst().orElseThrow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public List<ServerDto> findAll() {
|
public List<ServerDto> findAll() {
|
||||||
synchronized (lock) {
|
synchronized (serversLock) {
|
||||||
return list.stream().map(ServerDto::new).toList();
|
return servers.stream().map(ServerDto::new).toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public File getIconFileByName(@NonNull final String name) {
|
public File getIconFileByName(@NonNull final String name) {
|
||||||
synchronized (lock) {
|
synchronized (serversLock) {
|
||||||
return getByName(name).iconFile;
|
return getByName(name).iconFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public List<ServerDto> stopAll() {
|
||||||
|
synchronized (serversLock) {
|
||||||
|
return servers.stream().peek(this::stop).map(ServerDto::new).toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user