X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fclient.cpp;h=a57879050bf0164b61ee14c2b662e3b61eac5818;hp=05fe59723c362a14c875aeb067fbdd1eebb50e4b;hb=527eb71703f3047450610db10bc886799bb2f237;hpb=a5f038c8ac4b24d2eee88e2db41b06a4e4cca53f diff --git a/src/client.cpp b/src/client.cpp index 05fe5972..a5787905 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -5,28 +5,76 @@ #include #include "hashprobe.grpc.pb.h" +#include "types.h" +#include "uci.h" using grpc::Channel; using grpc::ClientContext; using grpc::Status; +using namespace hashprobe; + +std::string FormatMove(const HashProbeMove &move) { + if (move.from_sq().empty()) return "MOVE_NONE"; + return move.pretty(); +} int main(int argc, char** argv) { std::shared_ptr channel(grpc::CreateChannel( "localhost:50051", grpc::InsecureChannelCredentials())); std::unique_ptr stub(HashProbe::NewStub(channel)); - HashProbeRequest request; -// request.set_fen("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"); - request.set_fen(argv[1]); + for ( ;; ) { + char buf[256]; + if (fgets(buf, sizeof(buf), stdin) == nullptr || buf[0] == '\n') { + exit(0); + } + + char *ptr = strchr(buf, '\n'); + if (ptr != nullptr) *ptr = 0; + + HashProbeRequest request; + request.set_fen(buf); - HashProbeResponse response; - ClientContext context; - Status status = stub->Probe(&context, request, &response); + HashProbeResponse response; + ClientContext context; + Status status = stub->Probe(&context, request, &response); - if (status.ok()) { - std::cout << response.DebugString(); - } else { - std::cout << "RPC failed"; + if (status.ok()) { + for (const HashProbeLine &line : response.line()) { + std::cout << FormatMove(line.move()) << " "; + std::cout << line.found() << " "; + for (const HashProbeMove &move : line.pv()) { + std::cout << FormatMove(move) << ","; + } + std::cout << " "; + switch (line.bound()) { + case HashProbeLine::BOUND_NONE: + std::cout << "?"; + break; + case HashProbeLine::BOUND_EXACT: + std::cout << "=="; + break; + case HashProbeLine::BOUND_UPPER: + std::cout << "<="; + break; + case HashProbeLine::BOUND_LOWER: + std::cout << ">="; + break; + } + switch (line.value().score_type()) { + case HashProbeScore::SCORE_CP: + std::cout << " cp " << line.value().score_cp() << " "; + break; + case HashProbeScore::SCORE_MATE: + std::cout << " mate " << line.value().score_mate() << " "; + break; + } + std::cout << line.depth() << std::endl; + } + std::cout << "END" << std::endl; + } else { + std::cout << "ERROR" << std::endl; + } } return 0;