]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/Robot_Demo/src/org/ocera/orte/demo/HokuyoScanSubscribe.java
ROBOT_DEMO: use new constants and fix behavior of callback functions
[orte.git] / orte / Robot_Demo / src / org / ocera / orte / demo / HokuyoScanSubscribe.java
index 97b5cd58fe112eb69a0754a6b76c41b99664afa4..900d9f21d0b5f3ecd97971ac12ebdd04b5460e40 100644 (file)
@@ -1,5 +1,9 @@
 package org.ocera.orte.demo;
 
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
+
 import org.ocera.orte.DomainApp;
 import org.ocera.orte.Subscription;
 import org.ocera.orte.SubscriptionCallback;
@@ -7,18 +11,20 @@ import org.ocera.orte.types.MessageData;
 import org.ocera.orte.types.NtpTime;
 import org.ocera.orte.types.RecvInfo;
 import org.ocera.orte.types.SubsProp;
+import org.ocera.orte.types.ORTEConstant;
 
 public class HokuyoScanSubscribe extends SubscriptionCallback{
 
-    public final static int IMMEDIATE    = 0x02;
-    public final static int BEST_EFFORTS = 0x01;
-    
        private Subscription sub;
        private HokuyoView view;
        private HokuyoScanType hokuyomsg;
        private DomainApp domainApp;
        private SubsProp subProps;
+       
        private boolean isCancelled = true;
+       private final ReentrantReadWriteLock controlRrwl = new ReentrantReadWriteLock(true);
+       private final ReadLock rcLock = controlRrwl.readLock();
+       private final WriteLock wcLock = controlRrwl.writeLock();
        
        public HokuyoScanSubscribe(DomainApp domainApp, HokuyoView view) {
                this.view = view;
@@ -33,26 +39,42 @@ public class HokuyoScanSubscribe extends SubscriptionCallback{
                                                        "hokuyo_scan",                                  
                                                        minSeparation,  
                                                        deadline,
-                                                       IMMEDIATE,
-                                                       BEST_EFFORTS,
+                                                       ORTEConstant.IMMEDIATE,
+                                                       ORTEConstant.BEST_EFFORTS,
                                                        0);
        }
        
        public void start() {
-           isCancelled = false;
-               sub = domainApp.createSubscription(subProps, hokuyomsg, this);
+               wcLock.lock();
+               try {
+                       isCancelled = false;
+                       sub = domainApp.createSubscription(subProps, hokuyomsg, this);
+               } finally {
+                       wcLock.unlock();
+               }
        }
        
        public void cancel() {
-               sub.destroy();
-               isCancelled = true;
+               wcLock.lock();
+               try {
+                       isCancelled = true;
+                       sub.destroy();
+               } finally {
+                       wcLock.unlock();
+               }
        }
        
        public boolean isCancelled() {
-               return isCancelled;
+               rcLock.lock();
+               try {
+                       return isCancelled;
+               } finally {
+                       rcLock.unlock();
+               }
        }
        
     public void callback(RecvInfo info, MessageData msg) {
-       view.setData(((HokuyoScanType)msg).hokuyo);
-       }
-}
\ No newline at end of file
+      if (info.getRecvStatus() == ORTEConstant.NEW_DATA)
+        view.setData(((HokuyoScanType)msg).hokuyo);
+    }
+}