ListenerNode.java
Go to the documentation of this file.
00001 package com.github.rosjava.android_remocons.common_tools;
00002 
00003 import org.ros.android.MessageCallable;
00004 import org.ros.exception.RosException;
00005 import org.ros.exception.RosRuntimeException;
00006 import org.ros.message.MessageListener;
00007 import org.ros.namespace.GraphName;
00008 import org.ros.node.AbstractNodeMain;
00009 import org.ros.node.ConnectedNode;
00010 import org.ros.node.topic.Subscriber;
00011 
00012 
00016 public class ListenerNode<T> extends AbstractNodeMain
00017 {
00018     private String topicName;
00019     private String messageType;
00020     private T      lastMessage;
00021     private MessageCallable<String, T> callable;
00022 
00023     public ListenerNode(String topic, String type)
00024     {
00025         topicName = topic;
00026         messageType = type;
00027     }
00028 
00029     public T getLastMessage()
00030     {
00031         return lastMessage;
00032     }
00033 
00034     public void setTopicName(String topicName)
00035     {
00036         this.topicName = topicName;
00037     }
00038 
00039     public void setMessageType(String messageType)
00040     {
00041         this.messageType = messageType;
00042     }
00043 
00044     public void setMessageToStringCallable(MessageCallable<String, T> callable)
00045     {
00046         this.callable = callable;
00047     }
00048 
00049     @Override
00050     public GraphName getDefaultNodeName() {
00051         return GraphName.of("get_" + topicName + "_node");
00052     }
00053 
00054     @Override
00055     public void onStart(ConnectedNode connectedNode) {
00056         Subscriber<T> subscriber = connectedNode.newSubscriber(topicName, messageType);
00057         subscriber.addMessageListener(new MessageListener<T>() {
00058             @Override
00059             public void onNewMessage(final T message) {
00060                 lastMessage = message;
00061                 if (callable != null) {
00062                     callable.call(message);
00063                 }
00064             }
00065         });
00066     }
00067 
00073     public void waitForResponse() throws RosException {
00074         int count = 0;
00075         while ( lastMessage == null ) {
00076             try {
00077                 Thread.sleep(200);
00078             } catch (Exception e) {
00079                 throw new RosRuntimeException(e);
00080             }
00081             if ( count == 20 ) {  // timeout.
00082                 throw new RosException("timed out waiting for topic messages");
00083             }
00084             count = count + 1;
00085         }
00086     }
00087 }


android_remocons
Author(s): Daniel Stonier, Kazuto Murase
autogenerated on Sat Jun 8 2019 19:32:24