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;
private Process process;
private ProcessBuilder processBuilder;
- private BufferedReader reader;
- private BufferedWriter writer;
+ private ExternalEngine engine;
private boolean isInit = false;
} 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
Thread engineThread = new Thread(
new Runnable() {
public void run() {
+ Transmitter<String> 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(
);
}
} 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;
}
}
}
engineThread.start();
}
- public void run() throws IOException, InterruptedException {
- //Map<String, String> 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();
- }
-
}