Return all candidate moves from the probe.
[stockfish] / src / client.cpp
index b3ec68f..b1eead5 100644 (file)
@@ -12,6 +12,16 @@ using grpc::Channel;
 using grpc::ClientContext;
 using grpc::Status;
 
+std::string FormatMove(Move move) {
+  if (move == MOVE_NULL) {
+    return "Null-move";
+  } else if (move == MOVE_NONE) {
+    return "MOVE_NONE";
+  } else {
+    return UCI::square(from_sq(move)) + UCI::square(to_sq(move));
+  }
+}
+
 int main(int argc, char** argv) {
   std::shared_ptr<Channel> channel(grpc::CreateChannel(
       "localhost:50051", grpc::InsecureChannelCredentials()));
@@ -34,31 +44,28 @@ int main(int argc, char** argv) {
     Status status = stub->Probe(&context, request, &response);
 
     if (status.ok()) {
-      std::cout << response.found() << " ";
-      if (Move(response.move()) == MOVE_NULL) {
-        std::cout << "Null-move ";
-      } else if (Move(response.move()) == MOVE_NONE) {
-        std::cout << "MOVE_NONE ";
-      } else {
-        std::cout << UCI::square(from_sq(Move(response.move())))
-                  << UCI::square(to_sq(Move(response.move()))) << " ";
+      for (const HashProbeMove &hpmove : response.move()) {
+        std::cout << FormatMove(Move(hpmove.move())) << " ";
+        std::cout << hpmove.found() << " ";
+        std::cout << FormatMove(Move(hpmove.pv_move())) << " ";
+        switch (hpmove.bound()) {
+        case HashProbeMove::BOUND_NONE:
+          std::cout << "?";
+          break;
+        case HashProbeMove::BOUND_EXACT:
+          std::cout << "==";
+          break;
+        case HashProbeMove::BOUND_UPPER:
+          std::cout << "<=";
+          break;
+        case HashProbeMove::BOUND_LOWER:
+          std::cout << ">=";
+          break;
+        } 
+        std::cout << " " << UCI::value(Value(hpmove.value())) << " ";
+        std::cout << hpmove.depth() << std::endl;
       }
-      switch (response.bound()) {
-      case HashProbeResponse::BOUND_NONE:
-        std::cout << "?";
-        break;
-      case HashProbeResponse::BOUND_EXACT:
-        std::cout << "==";
-        break;
-      case HashProbeResponse::BOUND_UPPER:
-        std::cout << "<=";
-        break;
-      case HashProbeResponse::BOUND_LOWER:
-        std::cout << ">=";
-        break;
-      } 
-      std::cout << " " << UCI::value(Value(response.value())) << " ";
-      std::cout << response.depth() << std::endl;
+      std::cout << "END" << std::endl;
     } else {
       std::cout << "ERROR" << std::endl;
     }