Skip to content

Commit

Permalink
Still on the settings gui task :-(
Browse files Browse the repository at this point in the history
  • Loading branch information
fathzer committed Feb 18, 2024
1 parent b2c1f12 commit 8a8e1ce
Show file tree
Hide file tree
Showing 15 changed files with 664 additions and 167 deletions.
19 changes: 13 additions & 6 deletions data/engines.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
#C:\Users\jeanm\Desktop\chesslib\uci.bat
#"C:\Program Files\Java\jdk-17\bin"\java -DuciInitCommands=C:\Users\jeanm\Desktop\chesslib\uci.ini -jar C:\Users\jeanm\Desktop\chesslib\chesslib-uci-engine.jar 2>C:\Users\jeanm\Desktop\logchesslib.txt

C:\Program Files\Java\jdk-17\bin\java -jar C:\Users\jeanm\Desktop\chesslib\chesslib-uci-engine.jar
#C:/Program Files/Java/jdk-17/bin/java -jar C:\Users/jeanm/Desktop/chesslib/chesslib-uci-engine.jar
#java -version
{
"engines": [
{
"name": "Dragon",
"command": ["C:/Program Files (x86)/Arena/Engines/Dragon/Dragon_46.exe"]
},
{
"name": "ChesLib",
"command": ["C:/Program Files/Java/jdk-17/bin/java","-jar","C:/Users/jeanm/Desktop/chesslib/chesslib-uci-engine.jar"]
}

]
}
91 changes: 72 additions & 19 deletions src/main/java/com/fathzer/jchess/bot/uci/EngineLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,36 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.List;

import org.json.JSONObject;

import com.fathzer.jchess.bot.Engine;
import com.fathzer.jchess.internal.InternalEngine;
import com.fathzer.util.TinyJackson;
import com.fathzer.util.TinyJackson.JsonIgnore;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class EngineLoader {
private static final Path PATH = Paths.get("data/engines.json");
private static Map<String, EngineData> data;
private static List<EngineData> data;

private EngineLoader() {
super();
}

public static void init() throws IOException {
final EngineData internal = new EngineData("jchess", null);
if (data!=null) {
return;
}
final EngineData internal = new EngineData("JChess", null, new InternalEngine());
final EngineData[] array;
IOException error = null;
if (!Files.exists(PATH)) {
Expand All @@ -45,36 +49,85 @@ public static void init() throws IOException {
error = e;
}
array = new EngineData[dummy.length+1];
System.arraycopy(dummy, 0, array, 0, dummy.length);
array[dummy.length] = internal;
array[0] = internal;
System.arraycopy(dummy, 0, array, 1, dummy.length);
}
data = Arrays.stream(array).collect(Collectors.toMap(EngineData::getName, Function.identity()));
data = Arrays.asList(array);
if (error!=null) {
throw error;
}
Runtime.getRuntime().addShutdownHook(new Thread(()-> shutdown()));
}

private static void shutdown() {
data.forEach(e -> {
if (e.command!=null) {
// If not the internal engine
try {
e.stop();
} catch (IOException e1) {
log.error("An error occured while stopping "+e.getName()+" engine",e1);
}
}
});
}

public static Map<String, EngineData> getEngines() {
public static List<EngineData> getEngines() {
if (data==null) {
throw new IllegalStateException("Loader is not inited");
}
return data;
}

public static Engine buildEngine(EngineData data) throws IOException {
if (data.getCommand()==null) {
return new InternalEngine();
} else {
return new UCIEngine(data);
}
}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public static class EngineData {
@Getter
@Setter
private String name;
@Getter
@Setter
private String[] command;
@JsonIgnore
private Engine engine;

/** Gets the engine.
* @return The engine or null if server is not started
*/
public Engine getEngine() {
return engine;
}

/** Starts the engine.
* @return true if the engine was not started before calling this method
* @throws IOException If something went wrong during server start
*/
public boolean start() throws IOException {
if (engine==null) {
if (command!=null) {
engine = new UCIEngine(this);
} else {
engine = new InternalEngine();
}
return true;
}
return false;
}

/** Stops the engine.
* @return true if the engine was not stopped before calling this method
* @throws IOException If something went wrong during server stop
*/
public boolean stop() throws IOException {
if (engine!=null) {
try {
engine.close();
return true;
} finally {
engine = null;
}
}
return false;
}
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/fathzer/jchess/settings/Context.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.fathzer.jchess.settings;

import java.util.List;

import com.fathzer.jchess.bot.uci.EngineLoader.EngineData;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class Context {
private GameSettings settings;
private List<EngineData> engines;
}
2 changes: 1 addition & 1 deletion src/main/java/com/fathzer/jchess/swing/JChess.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fathzer.jchess.bot.uci.EngineLoader;
import com.fathzer.jchess.settings.GameSettings;
import com.fathzer.jchess.swing.settings.SettingsDialog;
import com.fathzer.jchess.swing.settings.old.SettingsDialog;
import com.fathzer.jchess.uci.JChessUCI;
import com.fathzer.soft.ajlib.swing.framework.Application;
import java.awt.Color;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.fathzer.jchess.swing.settings.clock;
package com.fathzer.jchess.swing.settings;

import javax.swing.JPanel;
import java.awt.GridBagLayout;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.fathzer.jchess.swing.settings.engine;
package com.fathzer.jchess.swing.settings;

import java.util.Collections;
import java.util.List;
Expand All @@ -24,13 +24,15 @@
import java.math.BigInteger;
import java.awt.GridBagLayout;

public class EnginePanel extends JPanel {
/** A panel to configure an engine.
*/
class EngineConfigurationPanel extends JPanel {
private static final long serialVersionUID = 1L;

/**
* Create the panel.
*/
public EnginePanel(List<Option<?>> options) {
EngineConfigurationPanel(List<Option<?>> options) {
setLayout(new GridBagLayout());
if (options==null) {
options = Collections.emptyList();
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/fathzer/jchess/swing/settings/EngineDialog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.fathzer.jchess.swing.settings;

import java.awt.Window;

import javax.swing.JPanel;

import com.fathzer.jchess.bot.Engine;
import com.fathzer.soft.ajlib.swing.dialog.AbstractDialog;

public class EngineDialog extends AbstractDialog<Engine, Boolean> {
private static final long serialVersionUID = 1L;

public EngineDialog(Window owner, Engine data) {
super(owner, "Settings", data);
this.getCancelButton().setVisible(false);
this.getOkButton().setVisible(false);
}

@Override
protected JPanel createCenterPane() {
return new EngineConfigurationPanel(data.getOptions());
}

@Override
protected Boolean buildResult() {
return true;
}
}
Loading

0 comments on commit 8a8e1ce

Please sign in to comment.