]> rtime.felk.cvut.cz Git - orte.git/blob - orte/contrib/Robot_Demo/src/org/ocera/orte/demo/Publishers/CraneCmdPublish.java
ROBOT_DEMO: move to contribs
[orte.git] / orte / contrib / Robot_Demo / src / org / ocera / orte / demo / Publishers / CraneCmdPublish.java
1 package org.ocera.orte.demo.Publishers;
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.Publication;
9 import org.ocera.orte.demo.DataTypes.CraneCmdType;
10 import org.ocera.orte.types.NtpTime;
11 import org.ocera.orte.types.PublProp;
12
13 public class CraneCmdPublish {
14         
15         private boolean isCancelled = true;
16         private CraneCmdType liftmsg;
17         private Publication pub;
18         private PublProp publProp;
19         private DomainApp appDomain;
20         
21         private final ReentrantReadWriteLock controlRrwl = new ReentrantReadWriteLock(true);
22         private final ReadLock rcLock = controlRrwl.readLock();
23         private final WriteLock wcLock = controlRrwl.writeLock();
24         
25         public CraneCmdPublish(DomainApp appDomain) {
26                 this.appDomain = appDomain;
27                 
28             NtpTime persistence = new NtpTime(3);
29             int strength = 100;
30             
31             liftmsg = new CraneCmdType(appDomain,"crane_cmd");
32             
33             publProp = new PublProp(liftmsg.getTopic(),
34                                                                          "crane_cmd",                                   
35                                                                          persistence,
36                                                                          strength);
37         }
38         
39         public void start() {
40                 wcLock.lock();
41                 try {
42                         isCancelled = false;
43                     pub = appDomain.createPublication(publProp, liftmsg);
44                 }
45                 finally {
46                         wcLock.unlock();
47                 }
48         }
49         
50         public void cancel() {
51                 wcLock.lock();
52                 try {
53                         isCancelled = true;
54                         pub.destroy();
55                 } finally {
56                         wcLock.unlock();
57                 }
58         }
59         
60         public boolean isCancelled() {
61                 rcLock.lock();
62                 try {
63                         return isCancelled;
64                 } finally {
65                         rcLock.unlock();
66                 }
67         }
68         
69         public void send(int magnet) {
70                 liftmsg.position = magnet;
71                 pub.send(liftmsg);
72         }
73 }