diff --git a/Userland/Libraries/LibChess/UCICommand.cpp b/Userland/Libraries/LibChess/UCICommand.cpp index 90a84dd9e5..c849a17140 100644 --- a/Userland/Libraries/LibChess/UCICommand.cpp +++ b/Userland/Libraries/LibChess/UCICommand.cpp @@ -311,8 +311,15 @@ ErrorOr> BestMoveCommand::from_string(StringView { auto tokens = command.split_view(' '); VERIFY(tokens[0] == "bestmove"); - VERIFY(tokens.size() == 2); - return adopt_nonnull_own_or_enomem(new (nothrow) BestMoveCommand(Move(tokens[1]))); + VERIFY(tokens.size() == 2 || tokens.size() == 4); + auto best_move = Move(tokens[1]); + Optional move_to_ponder; + if (tokens.size() == 4) { + VERIFY(tokens[2] == "ponder"); + move_to_ponder = Move(tokens[3]); + } + + return adopt_nonnull_own_or_enomem(new (nothrow) BestMoveCommand(best_move, move_to_ponder)); } ErrorOr BestMoveCommand::to_string() const @@ -320,6 +327,10 @@ ErrorOr BestMoveCommand::to_string() const StringBuilder builder; TRY(builder.try_append("bestmove "sv)); TRY(builder.try_append(TRY(move().to_long_algebraic()))); + if (move_to_ponder().has_value()) { + TRY(builder.try_append(" ponder "sv)); + TRY(builder.try_append(TRY(move_to_ponder()->to_long_algebraic()))); + } TRY(builder.try_append('\n')); return builder.to_string(); } diff --git a/Userland/Libraries/LibChess/UCICommand.h b/Userland/Libraries/LibChess/UCICommand.h index 318fb58f2c..217f955433 100644 --- a/Userland/Libraries/LibChess/UCICommand.h +++ b/Userland/Libraries/LibChess/UCICommand.h @@ -229,9 +229,10 @@ public: class BestMoveCommand : public Command { public: - explicit BestMoveCommand(Chess::Move move) + explicit BestMoveCommand(Chess::Move move, Optional move_to_ponder = {}) : Command(Command::Type::BestMove) , m_move(::move(move)) + , m_move_to_ponder(::move(move_to_ponder)) { } @@ -240,9 +241,11 @@ public: virtual ErrorOr to_string() const override; Chess::Move move() const { return m_move; } + Optional move_to_ponder() const { return m_move_to_ponder; } private: Chess::Move m_move; + Optional m_move_to_ponder; }; class InfoCommand : public Command {