X-Git-Url: https://git.hedgecode.org/?p=chesshog.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fuci%2FExternalEngineRunner.java;h=cb84f033f95f3290969a2212033983dcff87b578;hp=fd81352e5b3b3ed092a97fa058e0c2b44fbaca99;hb=d8e01b4e01a458fad7ef2e641855d045b1c30af1;hpb=d290e40e310fc81ee8ccaf98c2d4cec017561151 diff --git a/src/main/java/org/hedgecode/chess/uci/ExternalEngineRunner.java b/src/main/java/org/hedgecode/chess/uci/ExternalEngineRunner.java index fd81352..cb84f03 100644 --- a/src/main/java/org/hedgecode/chess/uci/ExternalEngineRunner.java +++ b/src/main/java/org/hedgecode/chess/uci/ExternalEngineRunner.java @@ -16,15 +16,8 @@ package org.hedgecode.chess.uci; -import java.io.BufferedReader; -import java.io.BufferedWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.util.List; -import java.util.Scanner; import org.hedgecode.chess.uci.annotation.CommandDirection; import org.hedgecode.chess.uci.command.CommandParams; @@ -39,8 +32,7 @@ public final class ExternalEngineRunner implements EngineRunner { private Process process; private ProcessBuilder processBuilder; - private BufferedReader reader; - private BufferedWriter writer; + private ExternalEngine engine; private boolean isInit = false; @@ -62,21 +54,14 @@ public final class ExternalEngineRunner implements EngineRunner { } catch (IOException e) { throw new EngineException("uci.engine.external.start", e.getLocalizedMessage()); } - reader = new BufferedReader( - new InputStreamReader( - process.getInputStream() - ) - ); - writer = new BufferedWriter( - new OutputStreamWriter( - process.getOutputStream() - ) + + engine = new ExternalEngine( + process.getInputStream(), + process.getOutputStream() ); isInit = true; - return new ExternalEngine( - writer - ); + return engine; } @Override @@ -87,10 +72,10 @@ public final class ExternalEngineRunner implements EngineRunner { Thread engineThread = new Thread( new Runnable() { public void run() { + Transmitter engineTransmitter = engine.transmitter(); try { - Scanner scanner = new Scanner(reader); - while (scanner.hasNextLine()) { - String command = scanner.nextLine(); + while (engineTransmitter.hasCommand()) { + String command = engineTransmitter.transmitCommand(); if (command.isEmpty()) continue; CommandParams commandParams = new CommandParams(command); commandExecutor.exec( @@ -100,16 +85,15 @@ public final class ExternalEngineRunner implements EngineRunner { ); } } finally { - try { - writer.close(); - reader.close(); - } catch (IOException ignored) { - } commandExecutor.exec( UCIConstants.TERMINATE, CommandDirection.FROM_ENGINE, null ); + engineTransmitter.stop(); + engineTransmitter.close(); + if (process.isAlive()) process.destroy(); + isInit = false; } } } @@ -117,58 +101,4 @@ public final class ExternalEngineRunner implements EngineRunner { engineThread.start(); } - public void run() throws IOException, InterruptedException { - //Map environment = processBuilder.environment(); - Process process = processBuilder.start(); - InputStream is = process.getInputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - OutputStream os = process.getOutputStream(); - BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); - - Thread engineThread = new Thread( - new Runnable() { - public void run() { - Scanner scanner = new Scanner(br); // - while (scanner.hasNextLine()) { - System.out.println(scanner.nextLine()); - } -/* - String line; - try { - while ((line = br.readLine()) != null) { - System.out.println(line); - bw.write("isready"); - } - } catch (IOException e) { - e.printStackTrace(); - } -*/ - System.out.println("Engine terminated."); - } - } - ); - engineThread.start(); - - bw.write("uci\n"); - bw.flush(); - bw.write("isready\n"); - bw.flush(); - bw.write("quit\n"); - bw.flush(); - - //process.waitFor(); - - } - - - public static void main(String... args) throws Exception { -/* - String[] strings = " uci test one more test".trim().split("\\s+", 2); - for (String string : strings) - System.out.println(string); -*/ - - new ExternalEngineRunner("stockfish.exe").run(); - } - }