2021SC@SDUSC
一、写在前面
通过对ROS Java文件结构的分析,我发现名为Service的包其实有两个,一个包的路径为rosjava.src.main.java.org.ros.node.service,另一个包的路径为rosjava.src.main.java.org.ros.internal.node.service,而且这两个包内的代码并不相同.
之前我们提到过,控制ROS作为一个操作系统运行的是其Master节点,而其它的功能以外围节点的形式接入以提供服务.而为了使得逻辑统一,Master自身的功能也是以node的格式编写的.因此,外围的node就是我们提到的第一个包,其中都是接口形式的代码,规定了node的编写规范;而internal包下的node中均为Java类,因此是可以直接运行的,用于构建Master节点,并能够在节点按照外部包编程时继承一部分内部包的内容.在本节我们将首先讲解外部的service包.
二、代码分析
在service包中,包含8个文件,以接口的形式规定了提供service类型功能的节点需要实现的各种动作.
public interface ServiceServer<T, S> {
GraphName getName();
URI getUri();
void shutdown();
void addListener(ServiceServerListener<T, S> listener);
}
ServiceServer为一个接口,需要提供四个方法.getName返回该节点的名称、getURI返回节点的统一资源标识符、shutdown关闭该service服务的运行,adListener为该service服务添加一个监听器.
public interface ServiceServerListener<T