29 #include <corbo-communication/messages/corbo_parameters.pb.h> 36 std::unique_ptr<google::protobuf::Message> MasterServiceClient::createParameterMsg()
const 38 return std::unique_ptr<messages::corboParameters>(
new messages::corboParameters);
41 bool MasterServiceClient::setParameters(
const google::protobuf::Message& parameters,
messages::Status& status_msg,
int timeout_ms)
43 const messages::corboParameters* params =
dynamic_cast<const messages::corboParameters*
>(¶meters);
46 status_msg.set_ok(
false);
47 status_msg.set_text(
"Parameter message is not of type corbo::messages::corboParameters.");
52 int timeout_individual =
std::floor((
double)timeout_ms / 4);
55 ret_val = setPlant(params->plant(), sub_status, timeout_individual);
56 status_msg.set_ok(status_msg.ok() && sub_status.ok());
57 if (!sub_status.text().empty()) status_msg.set_text(status_msg.text() +
"\n" + sub_status.text());
59 ret_val = setController(params->controller(), sub_status, timeout_individual);
60 status_msg.set_ok(status_msg.ok() && sub_status.ok());
61 if (!sub_status.text().empty()) status_msg.set_text(status_msg.text() +
"\n" + sub_status.text());
63 ret_val = setObserver(params->observer(), status_msg, timeout_individual);
64 status_msg.set_ok(status_msg.ok() && sub_status.ok());
65 if (!sub_status.text().empty()) status_msg.set_text(status_msg.text() +
"\n" + sub_status.text());
67 ret_val = setTask(params->task(), status_msg, timeout_individual);
68 status_msg.set_ok(status_msg.ok() && sub_status.ok());
69 if (!sub_status.text().empty()) status_msg.set_text(status_msg.text() +
"\n" + sub_status.text());
74 bool MasterServiceClient::getParameters(google::protobuf::Message& parameters,
int timeout_ms)
78 messages::corboParameters* params =
dynamic_cast<messages::corboParameters*
>(¶meters);
81 PRINT_ERROR(
"MasterServiceClient::getParameters(): Message type is not compatible!");
85 int timeout_individual =
std::floor((
double)timeout_ms / 4);
89 ret_val = getPlant(*params->mutable_plant(), timeout_individual);
91 ret_val = getController(*params->mutable_controller(), timeout_individual);
93 ret_val = getObserver(*params->mutable_observer(), timeout_individual);
95 ret_val = getTask(*params->mutable_task(), timeout_individual);
100 bool MasterServiceClient::setPlant(
const messages::Plant& plant_msg,
messages::Status& status_msg,
int timeout_ms)
102 if (!_stub)
return false;
103 grpc::ClientContext context;
104 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
105 context.set_deadline(deadline);
106 grpc::Status status = _stub->setPlant(&context, plant_msg, &status_msg);
114 bool MasterServiceClient::getPlant(messages::Plant& plant_msg,
int timeout_ms)
116 if (!_stub)
return false;
117 grpc::ClientContext context;
118 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
119 context.set_deadline(deadline);
120 messages::Void void_msg;
121 grpc::Status status = _stub->getPlant(&context, void_msg, &plant_msg);
129 bool MasterServiceClient::setController(
const messages::Controller& ctrl_msg,
messages::Status& status_msg,
int timeout_ms)
131 if (!_stub)
return false;
132 grpc::ClientContext context;
133 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
134 context.set_deadline(deadline);
135 grpc::Status status = _stub->setController(&context, ctrl_msg, &status_msg);
143 bool MasterServiceClient::getController(messages::Controller& ctrl_msg,
int timeout_ms)
145 if (!_stub)
return false;
146 grpc::ClientContext context;
147 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
148 context.set_deadline(deadline);
149 messages::Void void_msg;
150 grpc::Status status = _stub->getController(&context, void_msg, &ctrl_msg);
158 bool MasterServiceClient::setObserver(
const messages::Observer& obs_msg,
messages::Status& status_msg,
int timeout_ms)
160 if (!_stub)
return false;
161 grpc::ClientContext context;
162 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
163 context.set_deadline(deadline);
164 grpc::Status status = _stub->setObserver(&context, obs_msg, &status_msg);
172 bool MasterServiceClient::getObserver(messages::Observer& obs_msg,
int timeout_ms)
174 if (!_stub)
return false;
175 grpc::ClientContext context;
176 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
177 context.set_deadline(deadline);
178 messages::Void void_msg;
179 grpc::Status status = _stub->getObserver(&context, void_msg, &obs_msg);
187 bool MasterServiceClient::setTask(
const messages::Task& task_msg,
messages::Status& status_msg,
int timeout_ms)
189 if (!_stub)
return false;
190 grpc::ClientContext context;
191 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
192 context.set_deadline(deadline);
193 grpc::Status status = _stub->setTask(&context, task_msg, &status_msg);
201 bool MasterServiceClient::getTask(messages::Task& task_msg,
int timeout_ms)
203 if (!_stub)
return false;
204 grpc::ClientContext context;
205 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
206 context.set_deadline(deadline);
207 messages::Void void_msg;
208 grpc::Status status = _stub->getTask(&context, void_msg, &task_msg);
216 bool MasterServiceClient::getAvailableSignals(std::function<
void(
const messages::Signal& signal)> feedback,
int timeout_ms)
218 if (!_stub)
return false;
219 grpc::ClientContext context;
220 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
221 context.set_deadline(deadline);
222 messages::Void void_msg;
223 messages::Signal signal;
224 std::unique_ptr<grpc::ClientReader<messages::Signal>> reader(_stub->getAvailableSignals(&context, void_msg));
225 while (reader->Read(&signal))
230 if (!status.ok())
return false;
234 bool MasterServiceClient::performTask(std::function<
void(
const messages::Signal& signal)> feedback, std::string* msg,
int timeout_ms)
236 if (!_stub)
return false;
237 grpc::ClientContext context;
238 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
239 context.set_deadline(deadline);
241 messages::Void void_msg;
242 messages::Signal signal;
244 std::unique_ptr<grpc::ClientReader<messages::Signal>> reader(_stub->performTask(&context, void_msg));
245 while (reader->Read(&signal))
253 if (msg) *msg = status.error_message();
259 bool MasterServiceClient::verifyConfig(
messages::Status& status_msg,
int timeout_ms)
261 if (!_stub)
return false;
262 grpc::ClientContext context;
263 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
264 context.set_deadline(deadline);
265 messages::Void void_msg;
266 grpc::Status status = _stub->verifyConfig(&context, void_msg, &status_msg);
274 bool MasterServiceClient::ping(
int timeout_ms)
276 if (!_stub)
return false;
277 grpc::ClientContext context;
279 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
280 context.set_deadline(deadline);
281 messages::Void void_msg;
283 grpc::Status status = _stub->ping(&context, void_msg, &reponse);
291 bool MasterServiceClient::stopTask(
int timeout_ms)
293 if (!_stub)
return false;
294 grpc::ClientContext context;
296 std::chrono::system_clock::time_point deadline = std::chrono::system_clock::now() + std::chrono::milliseconds(timeout_ms);
297 context.set_deadline(deadline);
298 messages::Void void_msg;
299 messages::Void reponse;
300 grpc::Status status = _stub->stop(&context, void_msg, &reponse);
EIGEN_DEVICE_FUNC const FloorReturnType floor() const
#define PRINT_ERROR(msg)
Print msg-stream as error msg.