package dev.kske.chess.ui; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import dev.kske.chess.uci.UCIHandle; import dev.kske.chess.uci.UCIListener; /** * Project: Chess
* File: MenuBar.java
* Created: 23.07.2019
* Author: Leon Hofmeister */ public class EngineUtil { private static volatile List engineInfos; private static final String engineInfoFile = "engine_infos.ser"; static { loadEngineInfos(); } private EngineUtil() {} public static void addEngine(String enginePath) { try { EngineInfo info = new EngineInfo(enginePath); UCIHandle handle = new UCIHandle(enginePath); handle.setListener(new UCIListener() { @Override public void onIdName(String name) { info.name = name; } @Override public void onIdAuthor(String author) { info.author = author; } @Override public void onUCIOk() { engineInfos.add(info); handle.quit(); saveEngineInfos(); } }); handle.start(); } catch (IOException ex) { ex.printStackTrace(); } } @SuppressWarnings("unchecked") private static void loadEngineInfos() { try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(engineInfoFile))) { Object obj = in.readObject(); if (obj instanceof ArrayList) engineInfos = (ArrayList) obj; else throw new IOException("Serialized object has the wrong class."); } catch (ClassNotFoundException | IOException ex) { engineInfos = new ArrayList<>(); } } private static void saveEngineInfos() { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(engineInfoFile))) { out.writeObject(engineInfos); } catch (IOException ex) { ex.printStackTrace(); } } public static class EngineInfo implements Serializable { private static final long serialVersionUID = -474177108900833005L; public String path, name, author; public EngineInfo(String path) { this.path = path; } @Override public String toString() { return name + " by " + author + " at " + path; } } public static List getEngineInfos() { return engineInfos; } }