11/* Made by Jan Frase :) */
22package de .janfrase .blunder .uci ;
33
4+ import de .janfrase .blunder .engine .backend .movegen .MoveGenerator ;
45import de .janfrase .blunder .engine .backend .movegen .move .Move ;
56import de .janfrase .blunder .engine .backend .state .game .FenParser ;
67import de .janfrase .blunder .engine .backend .state .game .GameState ;
7- import de .janfrase .blunder .engine .search .NegaMax ;
8+ import de .janfrase .blunder .engine .search .algos . NegaMax ;
89import java .util .Arrays ;
910import java .util .Scanner ;
1011import org .apache .logging .log4j .LogManager ;
1112import org .apache .logging .log4j .Logger ;
1213
13- public class UciParser {
14+ public class UciMessageHandler {
1415
1516 // singleton pattern
16- private static final UciParser INSTANCE = new UciParser ();
17+ private static final UciMessageHandler INSTANCE = new UciMessageHandler ();
1718
1819 // logging
1920 private static final Logger LOGGER = LogManager .getLogger ();
2021 private static final String IN = "In: " ;
2122 private static final String OUT = "Out: " ;
2223
23- // incoming commands
24- private static final String UCI = "uci" ;
25- private static final String QUIT = "quit" ;
26- private static final String UCI_NEW_GAME = "ucinewgame" ;
27- private static final String POSITION = "position" ;
28- private static final String GO = "go" ;
29- private static final String STOP = "stop" ;
30- private static final String IS_READY = "isready" ;
24+ private static class IncomingMessage {
25+ // incoming commands
26+ private static final String UCI = "uci" ;
27+ private static final String DEBUG = "debug" ;
28+ private static final String IS_READY = "isready" ;
29+ private static final String SET_OPTION = "setoption" ;
30+ private static final String REGISTER = "register" ;
31+ private static final String UCI_NEW_GAME = "ucinewgame" ;
32+ private static final String POSITION = "position" ;
33+ private static final String GO = "go" ;
34+ private static final String STOP = "stop" ;
35+ private static final String PONDERHIT = "ponderhit" ;
36+ private static final String QUIT = "quit" ;
37+ }
3138
32- // outgoing messages
33- private static final String ID = "id Blunder" ;
34- private static final String UCI_OK = "uciok" ;
35- private static final String READY_OK = "readyok" ;
36- private static final String BEST_MOVE = "bestmove" ;
39+ private static class OutgoingMessage {
40+ // outgoing messages
41+ private static final String ID = "id Blunder" ;
42+ private static final String UCI_OK = "uciok" ;
43+ private static final String READY_OK = "readyok" ;
44+ private static final String BEST_MOVE = "bestmove" ;
45+ private static final String COPYPROTECTION = "copyprotection" ;
46+ private static final String REGISTRATION = "registration" ;
47+ private static final String INFO = "info" ;
48+ private static final String OPTION = "option" ;
49+ }
3750
38- private UciParser () {}
51+ private UciMessageHandler () {}
3952
40- public static UciParser getInstance () {
53+ public static UciMessageHandler getInstance () {
4154 return INSTANCE ;
4255 }
4356
@@ -52,7 +65,7 @@ private void parse() {
5265 boolean quit = false ;
5366
5467 while (!quit ) {
55- // blocks until next line is found!
68+ // blocks until next line is found
5669 while (!scanner .hasNextLine ()) {}
5770 String input = scanner .nextLine ();
5871
@@ -64,19 +77,19 @@ private void parse() {
6477 String [] arguments = Arrays .copyOfRange (tokens , 1 , tokens .length );
6578
6679 switch (commandName ) {
67- case UCI -> uci ();
68- case QUIT -> quit = true ;
69- case UCI_NEW_GAME -> uciNewGame ();
70- case POSITION -> position (arguments );
71- case GO -> go (arguments );
72- case STOP -> stop ();
73- case IS_READY -> isReady ();
80+ case IncomingMessage . UCI -> uci ();
81+ case IncomingMessage . QUIT -> quit = true ;
82+ case IncomingMessage . UCI_NEW_GAME -> uciNewGame ();
83+ case IncomingMessage . POSITION -> position (arguments );
84+ case IncomingMessage . GO -> go (arguments );
85+ case IncomingMessage . STOP -> stop ();
86+ case IncomingMessage . IS_READY -> isReady ();
7487 }
7588 }
7689 }
7790
7891 private void isReady () {
79- sendReply (READY_OK );
92+ sendReply (OutgoingMessage . READY_OK );
8093 }
8194
8295 private void sendReply (String message ) {
@@ -85,13 +98,13 @@ private void sendReply(String message) {
8598 }
8699
87100 private void uci () {
88- sendReply (ID );
89- sendReply (UCI_OK );
101+ sendReply (OutgoingMessage . ID );
102+ sendReply (OutgoingMessage . UCI_OK );
90103 }
91104
92105 private void uciNewGame () {
93106 GameState .resetGameState ();
94- sendReply (READY_OK );
107+ sendReply (OutgoingMessage . READY_OK );
95108 }
96109
97110 private void position (String [] arguments ) {
@@ -140,11 +153,14 @@ private void go(String[] arguments) {
140153 }
141154 }
142155 }
156+
157+ // TODO: This needs to run on a separate thread!
158+ Move move = NegaMax .startSearching (6 );
159+ sendReply (OutgoingMessage .BEST_MOVE + " " + move .toString ());
143160 }
144161
145162 private void stop () {
146- Move move = NegaMax .search (4 );
147-
148- sendReply (BEST_MOVE + " " + move .toString ());
163+ Move move = MoveGenerator .generateLegalMoves ().getFirst ();
164+ sendReply (OutgoingMessage .BEST_MOVE + " " + move .toString ());
149165 }
150166}
0 commit comments