Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ROS_SERVICE_SERVER_H_
00019 #define _ROS_SERVICE_SERVER_H_
00020
00021 #include "rosserial_msgs/TopicInfo.h"
00022
00023 #include "publisher.h"
00024 #include "subscriber.h"
00025
00026 namespace ros {
00027
00028 template<typename MReq , typename MRes>
00029 class ServiceServer : public Subscriber_ {
00030 public:
00031 typedef void(*CallbackT)(const MReq&, MRes&);
00032
00033 ServiceServer(const char* topic_name, CallbackT cb) :
00034 pub(topic_name, &resp, rosserial_msgs::TopicInfo::ID_SERVICE_SERVER + rosserial_msgs::TopicInfo::ID_PUBLISHER)
00035 {
00036 this->topic_ = topic_name;
00037 this->cb_ = cb;
00038 }
00039
00040
00041 virtual void callback(unsigned char *data){
00042 req.deserialize(data);
00043 cb_(req,resp);
00044 pub.publish(&resp);
00045 }
00046 virtual const char * getMsgType(){ return this->req.getType(); }
00047 virtual const char * getMsgMD5(){ return this->req.getMD5(); }
00048 virtual int getEndpointType(){ return rosserial_msgs::TopicInfo::ID_SERVICE_SERVER + rosserial_msgs::TopicInfo::ID_SUBSCRIBER; }
00049
00050 MReq req;
00051 MRes resp;
00052 Publisher pub;
00053 private:
00054 CallbackT cb_;
00055 };
00056
00057 }
00058
00059 #endif