1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #include "UciParser.h"
- #include <sstream>
- #include "ChessGame.h"
- using namespace std;
- const std::map<std::string, UciParser::CommandHandler> UciParser::commandHandlers = {
- {"uci", &UciParser::uci },
- {"debug", &UciParser::debug },
- {"isready", &UciParser::isready },
- {"setoption", &UciParser::setoption },
- {"register", &UciParser::doNothing },
- {"ucinewgame", &UciParser::ucinewgame },
- };
- int UciParser::parse(istream& in, ostream& out)
- {
- while (!in.eof()) {
- string line;
- getline(in, line);
- executeLine(line);
- }
- return 0;
- }
- int UciParser::executeLine(const string& line)
- {
- stringstream s{ line };
- string token;
- string command;
- vector<string> args;
- s >> command;
- while (s >> token) {
- args.push_back(std::move(token));
- }
- return executeCommand(command, args);
- }
- int UciParser::executeCommand(const string& command,
- const vector<string>& args)
- {
- try {
- CommandHandler ch = commandHandlers.at(command);
- (this->*ch)(args);
- return 0;
- }
- catch (out_of_range& oor) {
- // no handler for command -> invalid command
- return 1;
- }
- }
- void UciParser::sendCommand(const std::string& command,
- const std::vector<std::string>& args)
- {
- cout << command;
- std::for_each(args.begin(), args.end(), [] (auto& x) { cout << " " << x; });
- }
- void UciParser::uci(const std::vector<std::string>& args)
- {
- sendCommand(UCIOK);
- }
- void UciParser::debug(const std::vector<std::string>& args)
- {
- // not yet implemented
- }
- void UciParser::isready(const std::vector<std::string>& args)
- {
- sendCommand(READYOK);
- }
- void UciParser::setoption(const std::vector<std::string>& args)
- {
- }
- void UciParser::ucinewgame(const std::vector<std::string>& args)
- {
- }
- void UciParser::doNothing(const std::vector<std::string>& args)
- {
- // explicitly do nothing
- return;
- }
|