1 package org.ocera.orte.demo.Subscribers;
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.demo.DataTypes.HokuyoScanType;
11 import org.ocera.orte.demo.GUI.HokuyoView;
12 import org.ocera.orte.types.MessageData;
13 import org.ocera.orte.types.NtpTime;
14 import org.ocera.orte.types.RecvInfo;
15 import org.ocera.orte.types.SubsProp;
16 import org.ocera.orte.types.ORTEConstant;
18 public class HokuyoScanSubscribe extends SubscriptionCallback{
20 private Subscription sub;
21 private HokuyoView view;
22 private HokuyoScanType hokuyomsg;
23 private DomainApp domainApp;
24 private SubsProp subProps;
26 private boolean isCancelled = true;
27 private final ReentrantReadWriteLock controlRrwl = new ReentrantReadWriteLock(true);
28 private final ReadLock rcLock = controlRrwl.readLock();
29 private final WriteLock wcLock = controlRrwl.writeLock();
31 public HokuyoScanSubscribe(DomainApp domainApp, HokuyoView view) {
33 this.domainApp = domainApp;
35 NtpTime deadline = new NtpTime(10);
36 NtpTime minSeparation = new NtpTime(0);
38 hokuyomsg = new HokuyoScanType(domainApp, "hokuyo_scan");
40 subProps = new SubsProp(hokuyomsg.getTopic(),
44 ORTEConstant.IMMEDIATE,
45 ORTEConstant.BEST_EFFORTS,
53 sub = domainApp.createSubscription(subProps, hokuyomsg, this);
59 public void cancel() {
69 public boolean isCancelled() {
78 public void callback(RecvInfo info, MessageData msg) {
79 if (info.getRecvStatus() == ORTEConstant.NEW_DATA)
80 view.setData(((HokuyoScanType)msg).hokuyo);