]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/HokuyoScanSubscribe.java
Check whether windows dll is produced
[orte.git] / orte / Robot_Demo / src / org / ocera / orte / demo / HokuyoScanSubscribe.java
1 package org.ocera.orte.demo;
2
3 import java.util.concurrent.locks.ReentrantReadWriteLock;
4 import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
5 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
6
7 import org.ocera.orte.DomainApp;
8 import org.ocera.orte.Subscription;
9 import org.ocera.orte.SubscriptionCallback;
10 import org.ocera.orte.types.MessageData;
11 import org.ocera.orte.types.NtpTime;
12 import org.ocera.orte.types.RecvInfo;
13 import org.ocera.orte.types.SubsProp;
14 import org.ocera.orte.types.ORTEConstant;
15
16 public class HokuyoScanSubscribe extends SubscriptionCallback{
17
18         private Subscription sub;
19         private HokuyoView view;
20         private HokuyoScanType hokuyomsg;
21         private DomainApp domainApp;
22         private SubsProp subProps;
23         
24         private boolean isCancelled = true;
25         private final ReentrantReadWriteLock controlRrwl = new ReentrantReadWriteLock(true);
26         private final ReadLock rcLock = controlRrwl.readLock();
27         private final WriteLock wcLock = controlRrwl.writeLock();
28         
29         public HokuyoScanSubscribe(DomainApp domainApp, HokuyoView view) {
30                 this.view = view;
31                 this.domainApp = domainApp;
32                 
33             NtpTime deadline      = new NtpTime(10);
34             NtpTime minSeparation = new NtpTime(0);
35             
36             hokuyomsg = new HokuyoScanType(domainApp, "hokuyo_scan");
37                 
38             subProps = new SubsProp(hokuyomsg.getTopic(),
39                                                         "hokuyo_scan",                                  
40                                                         minSeparation,  
41                                                         deadline,
42                                                         ORTEConstant.IMMEDIATE,
43                                                         ORTEConstant.BEST_EFFORTS,
44                                                         0);
45         }
46         
47         public void start() {
48                 wcLock.lock();
49                 try {
50                         isCancelled = false;
51                         sub = domainApp.createSubscription(subProps, hokuyomsg, this);
52                 } finally {
53                         wcLock.unlock();
54                 }
55         }
56         
57         public void cancel() {
58                 wcLock.lock();
59                 try {
60                         isCancelled = true;
61                         sub.destroy();
62                 } finally {
63                         wcLock.unlock();
64                 }
65         }
66         
67         public boolean isCancelled() {
68                 rcLock.lock();
69                 try {
70                         return isCancelled;
71                 } finally {
72                         rcLock.unlock();
73                 }
74         }
75         
76     public void callback(RecvInfo info, MessageData msg) {
77       if (info.getRecvStatus() == ORTEConstant.NEW_DATA)
78         view.setData(((HokuyoScanType)msg).hokuyo);
79     }
80 }