#ifndef CONVEYOR_BELT_GRPC_CLIENT_H_ #define CONVEYOR_BELT_GRPC_CLIENT_H_ #include #include #include #include #include #include "conveyorBelt.grpc.pb.h" #include "conveyorBelt.pb.h" #include "conveyorBeltControlUnit.h" #include #include #include #include #include #include #include using grpc::Channel; using grpc::ClientContext; using grpc::ClientReader; using grpc::ClientWriter; using grpc::Status; class ConveyorBeltGrpcClient { private: std::unique_ptr stub_; public: // 启动带速度和方向的传送带 int startWithSpeedAndDirection(float speed, int direction) { LOG(INFO) << GRAY << "start connect to belt" << EMPTY; ConveyorBelt::SpeedInfo speedInfo; speedInfo.set_speed(speed); ConveyorBelt::DirectionInfo directionInfo; directionInfo.set_direction(direction); ConveyorBelt::Response response; ClientContext context_direction; grpc::Status ret = stub_->setDirection(&context_direction, directionInfo, &response); if (!ret.ok()) { LOG(INFO) << GRAY << "grpc server cannot connect" << EMPTY; return -2; } if (response.code() < 0) { return -1; } ClientContext context_start; stub_->open(&context_start, speedInfo, &response); if (response.code() < 0) { return -1; } LOG(INFO) << GRAY << "finish connect to belt" << EMPTY; return 0; } // 关闭传送带 int close() { LOG(INFO) << GRAY << "start connect to belt" << EMPTY; ConveyorBelt::DeviceID id; id.set_conveyorbeltid(0); ClientContext context_close; ConveyorBelt::Response response; stub_->close(&context_close, id, &response); if (response.code() < 0) { return -1; } LOG(INFO) << GRAY << "start connect to belt" << EMPTY; return 0; } // 获取传送带状态 int getWorkState() { LOG(INFO) << GRAY << "start connect to belt" << EMPTY; ConveyorBelt::DeviceID id; id.set_conveyorbeltid(0); ClientContext context_get; ConveyorBelt::Response response; stub_->getWorkState(&context_get, id, &response); LOG(INFO) << GRAY << "start connect to belt" << EMPTY; return response.code(); } ConveyorBeltGrpcClient(std::shared_ptr channel) : stub_(ConveyorBelt::ConveyorBeltService::NewStub(channel)) {} ~ConveyorBeltGrpcClient() {} }; #endif