X-Git-Url: https://git.hedgecode.org/?a=blobdiff_plain;f=chesshog-uci%2Fsrc%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fuci%2FExternalEngine.java;fp=chesshog-uci%2Fsrc%2Fmain%2Fjava%2Forg%2Fhedgecode%2Fchess%2Fuci%2FExternalEngine.java;h=fe4a8c9806cf1f3b7260b3c217e892361ed3bc30;hb=1c1d899a4dc4144e6b8ec93c0afcda09b38b5f6f;hp=0000000000000000000000000000000000000000;hpb=1fbf14530416c16f1c6fa5ee3e589482dd722a5d;p=chesshog.git diff --git a/chesshog-uci/src/main/java/org/hedgecode/chess/uci/ExternalEngine.java b/chesshog-uci/src/main/java/org/hedgecode/chess/uci/ExternalEngine.java new file mode 100644 index 0000000..fe4a8c9 --- /dev/null +++ b/chesshog-uci/src/main/java/org/hedgecode/chess/uci/ExternalEngine.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2018. Developed by Hedgecode. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.hedgecode.chess.uci; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; + +/** + * External UCI Engine. + * + * @author Dmitry Samoshin aka gotty + */ +public class ExternalEngine implements Engine { + + private static final String COMMAND_FORMAT = "%s %s"; + + private Transmitter transmitter; + private PrintWriter engineWriter; + + ExternalEngine(InputStream input, OutputStream output) { + transmitter = new ExternalEngineTransmitter(input); + engineWriter = new PrintWriter(output, true); + } + + public Transmitter transmitter() { + return transmitter; + } + + private void write(String command) { + engineWriter.println(command); + } + + private String format(String name, String params) { + return String.format( + COMMAND_FORMAT, name, params + ); + } + + @Override + public void init() { + write( + UCIConstants.UCI + ); + } + + @Override + public void debug(DebugMode mode) { + write( + format( + UCIConstants.DEBUG, mode.value() + ) + ); + } + + @Override + public void isReady() { + write( + UCIConstants.IS_READY + ); + } + + @Override + public void go() { + write( + UCIConstants.GO // todo: + params + ); + } + + @Override + public void stop() { + write( + UCIConstants.STOP + ); + } + + @Override + public void ponderhit() { + write( + UCIConstants.PONDER_HIT + ); + } + + @Override + public void quit() { + write( + UCIConstants.QUIT + ); + } + +}