1 package org.ocera.orte.demo;
3 import java.util.concurrent.locks.ReentrantReadWriteLock;
4 import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
5 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
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;
16 public class HokuyoScanSubscribe extends SubscriptionCallback{
18 private Subscription sub;
19 private HokuyoView view;
20 private HokuyoScanType hokuyomsg;
21 private DomainApp domainApp;
22 private SubsProp subProps;
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();
29 public HokuyoScanSubscribe(DomainApp domainApp, HokuyoView view) {
31 this.domainApp = domainApp;
33 NtpTime deadline = new NtpTime(10);
34 NtpTime minSeparation = new NtpTime(0);
36 hokuyomsg = new HokuyoScanType(domainApp, "hokuyo_scan");
38 subProps = new SubsProp(hokuyomsg.getTopic(),
42 ORTEConstant.IMMEDIATE,
43 ORTEConstant.BEST_EFFORTS,
51 sub = domainApp.createSubscription(subProps, hokuyomsg, this);
57 public void cancel() {
67 public boolean isCancelled() {
76 public void callback(RecvInfo info, MessageData msg) {
77 if (info.getRecvStatus() == ORTEConstant.NEW_DATA)
78 view.setData(((HokuyoScanType)msg).hokuyo);