-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathservice_server_template.cpp
49 lines (44 loc) · 1.67 KB
/
service_server_template.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <ros/ros.h>
#include <ros_template_programs/Expression.h>
#include <ros_template_programs/Calculation.h>
#include <iostream>
namespace ros_template_programs {
class ServiceServer {
private:
ros::NodeHandle nh_;
ros::NodeHandle pnh_;
ros::ServiceServer service_;
bool calculate(ros_template_programs::Calculation::Request &req,
ros_template_programs::Calculation::Response &res);
public:
ServiceServer( );
};
}
bool ros_template_programs::ServiceServer::calculate(
ros_template_programs::Calculation::Request &req,
ros_template_programs::Calculation::Response &res) {
ros_template_programs::Expression ex = req.expression;
if ( ex.calculate == "+" ) {
res.result = ex.a + ex.b;
} else if ( ex.calculate == "-" ) {
res.result = ex.a - ex.b;
} else if ( ex.calculate == "*" ) {
res.result = ex.a * ex.b;
} else {
res.result = ex.a / ex.b;
}
ROS_INFO("[%s] Received a call from a client\nRequest: %.2f %s %.2f",
ros::this_node::getName().c_str(), ex.a, ex.calculate.c_str(), ex.b);
ROS_INFO("sending back response: [%.f]\n", res.result);
return true;
}
ros_template_programs::ServiceServer::ServiceServer( ) : nh_(), pnh_("~") {
service_ = nh_.advertiseService("calculate_two_numbers", &ros_template_programs::ServiceServer::calculate, this);
ROS_INFO("[%s] Ready to calculate_two_numbers.", ros::this_node::getName().c_str());
}
int main(int argc, char *argv[]) {
ros::init(argc, argv, "service_server_template");
ros_template_programs::ServiceServer srv_srv;
ros::spin();
return 0;
}