Browse Source

LibChess: Add the UCI quit command

Tim Ledbetter 2 years ago
parent
commit
13dbc69c23

+ 13 - 0
Userland/Libraries/LibChess/UCICommand.cpp

@@ -333,4 +333,17 @@ DeprecatedString InfoCommand::to_deprecated_string() const
     return "info";
 }
 
+QuitCommand QuitCommand::from_string([[maybe_unused]] StringView command)
+{
+    auto tokens = command.split_view(' ');
+    VERIFY(tokens[0] == "quit");
+    VERIFY(tokens.size() == 1);
+    return QuitCommand();
+}
+
+DeprecatedString QuitCommand::to_deprecated_string() const
+{
+    return "quit\n";
+}
+
 }

+ 12 - 0
Userland/Libraries/LibChess/UCICommand.h

@@ -268,4 +268,16 @@ public:
     // FIXME: Add additional fields.
 };
 
+class QuitCommand : public Command {
+public:
+    explicit QuitCommand()
+        : Command(Command::Type::Quit)
+    {
+    }
+
+    static QuitCommand from_string(StringView command);
+
+    virtual DeprecatedString to_deprecated_string() const override;
+};
+
 }

+ 4 - 0
Userland/Libraries/LibChess/UCIEndpoint.cpp

@@ -53,6 +53,8 @@ void Endpoint::event(Core::Event& event)
         return handle_bestmove(static_cast<BestMoveCommand const&>(event));
     case Command::Type::Info:
         return handle_info(static_cast<InfoCommand const&>(event));
+    case Command::Type::Quit:
+        return handle_quit();
     default:
         break;
     }
@@ -97,6 +99,8 @@ NonnullOwnPtr<Command> Endpoint::read_command()
         return make<BestMoveCommand>(BestMoveCommand::from_string(line));
     } else if (line.starts_with("info"sv)) {
         return make<InfoCommand>(InfoCommand::from_string(line));
+    } else if (line.starts_with("quit"sv)) {
+        return make<QuitCommand>(QuitCommand::from_string(line));
     }
 
     dbgln("command line: {}", line);

+ 1 - 0
Userland/Libraries/LibChess/UCIEndpoint.h

@@ -30,6 +30,7 @@ public:
     virtual void handle_readyok() { }
     virtual void handle_bestmove(BestMoveCommand const&) { }
     virtual void handle_info(InfoCommand const&) { }
+    virtual void handle_quit() { }
 
     void send_command(Command const&);