From ce5abacb3b147317a2468e8d0f476db73ad21879 Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Fri, 31 Jul 2020 10:22:11 +0200
Subject: [PATCH] code for service tutorial

---
 CMakeLists.txt              |  8 ++++++++
 src/add_two_ints_client.cpp | 30 ++++++++++++++++++++++++++++++
 src/add_two_ints_server.cpp | 23 +++++++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 src/add_two_ints_client.cpp
 create mode 100644 src/add_two_ints_server.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index abbea0b..ed78eda 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -26,3 +26,11 @@ add_dependencies(talker tutorial_ros_pub_sub_generate_messages_cpp)
 add_executable(listener src/listener.cpp)
 target_link_libraries(listener ${catkin_LIBRARIES})
 add_dependencies(listener tutorial_ros_pub_sub_generate_messages_cpp)
+
+add_executable(add_two_ints_server src/add_two_ints_server.cpp)
+target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
+add_dependencies(add_two_ints_server tutorial_ros_pub_sub_generate_gencpp)
+
+add_executable(add_two_ints_client src/add_two_ints_client.cpp)
+target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
+add_dependencies(add_two_ints_client tutorial_ros_pub_sub_generate_gencpp)
diff --git a/src/add_two_ints_client.cpp b/src/add_two_ints_client.cpp
new file mode 100644
index 0000000..31da5a8
--- /dev/null
+++ b/src/add_two_ints_client.cpp
@@ -0,0 +1,30 @@
+#include "ros/ros.h"
+#include "tutorial_ros_pub_sub/AddTwoInts.h"
+#include <cstdlib>
+
+int main(int argc, char **argv)
+{
+  ros::init(argc, argv, "add_two_ints_client");
+  if (argc != 3)
+  {
+    ROS_INFO("usage: add_two_ints_client X Y");
+    return 1;
+  }
+
+  ros::NodeHandle n;
+  ros::ServiceClient client = n.serviceClient<tutorial_ros_pub_sub::AddTwoInts>("add_two_ints");
+  tutorial_ros_pub_sub::AddTwoInts srv;
+  srv.request.a = atoll(argv[1]);
+  srv.request.b = atoll(argv[2]);
+  if (client.call(srv))
+  {
+    ROS_INFO("Sum: %ld", (long int)srv.response.sum);
+  }
+  else
+  {
+    ROS_ERROR("Failed to call service add_two_ints");
+    return 1;
+  }
+
+  return 0;
+}
diff --git a/src/add_two_ints_server.cpp b/src/add_two_ints_server.cpp
new file mode 100644
index 0000000..f053439
--- /dev/null
+++ b/src/add_two_ints_server.cpp
@@ -0,0 +1,23 @@
+#include "ros/ros.h"
+#include "tutorial_ros_pub_sub/AddTwoInts.h"
+
+bool add(tutorial_ros_pub_sub::AddTwoInts::Request  &req,
+         tutorial_ros_pub_sub::AddTwoInts::Response &res)
+{
+  res.sum = req.a + req.b;
+  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
+  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
+  return true;
+}
+
+int main(int argc, char **argv)
+{
+  ros::init(argc, argv, "add_two_ints_server");
+  ros::NodeHandle n;
+
+  ros::ServiceServer service = n.advertiseService("add_two_ints", add);
+  ROS_INFO("Ready to add two ints.");
+  ros::spin();
+
+  return 0;
+}
-- 
GitLab