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;
|
||||
|
||||
@NonNull
|
||||
@GetMapping("stopAll")
|
||||
public List<ServerDto> stopAll() {
|
||||
return serverService.stopAll();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@GetMapping("findAll")
|
||||
public List<ServerDto> findAll() {
|
||||
|
||||
@ -25,15 +25,15 @@ public class ServerService {
|
||||
|
||||
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
|
||||
public void startup() {
|
||||
final File ROOT = new File(serverConfig.getPath());
|
||||
synchronized (lock) {
|
||||
list = Arrays.stream(Objects.requireNonNull(ROOT.listFiles())).map(this::_tryLoadingFromDir).filter(Optional::isPresent).map(Optional::get).toList();
|
||||
synchronized (serversLock) {
|
||||
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) {
|
||||
try {
|
||||
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);
|
||||
} catch (NoMinecraftServer e) {
|
||||
log.warn(e.getMessage());
|
||||
@ -65,6 +65,7 @@ public class ServerService {
|
||||
log.warn("Server is already running: name={}", server.properties.name);
|
||||
return;
|
||||
}
|
||||
stopAll();
|
||||
log.info("Starting server: name={}", server.properties.name);
|
||||
final ProcessBuilder builder = new ProcessBuilder("java", "-jar", "server.jar");
|
||||
builder.directory(server.directory);
|
||||
@ -129,23 +130,30 @@ public class ServerService {
|
||||
|
||||
@NonNull
|
||||
private Server getByName(@NonNull final String name) {
|
||||
synchronized (lock) {
|
||||
return list.stream().filter(server -> server.properties.name.equals(name)).findFirst().orElseThrow();
|
||||
synchronized (serversLock) {
|
||||
return servers.stream().filter(server -> server.properties.name.equals(name)).findFirst().orElseThrow();
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public List<ServerDto> findAll() {
|
||||
synchronized (lock) {
|
||||
return list.stream().map(ServerDto::new).toList();
|
||||
synchronized (serversLock) {
|
||||
return servers.stream().map(ServerDto::new).toList();
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public File getIconFileByName(@NonNull final String name) {
|
||||
synchronized (lock) {
|
||||
synchronized (serversLock) {
|
||||
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