-
Notifications
You must be signed in to change notification settings - Fork 0
/
anchor_agent.groovy
90 lines (66 loc) · 2.04 KB
/
anchor_agent.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import org.arl.fjage.*
import org.arl.fjage.Message
import org.arl.fjage.RealTimePlatform
import org.arl.unet.phy.*
import org.arl.unet.mac.*
import org.arl.unet.*
import org.arl.unet.net.*
import org.arl.unet.PDU
import org.arl.unet.net.Router
import org.arl.unet.nodeinfo.NodeInfo
import org.arl.unet.localization.*
import org.arl.unet.localization.RangeNtf.*
import org.arl.unet.localization.Ranging.*
import org.arl.unet.localization.RangeReq
import org.arl.unet.net.RouteDiscoveryReq
import java.nio.ByteOrder
import org.arl.fjage.Behavior
class anchor_agent extends UnetAgent {
def addr;
def nme;
def phy;
def nodeInfo;
def loc;
def router;
private final static PDU format = PDU.withFormat
{
uint16('addres');
int16('loca');
int16('loca1');
int16('loca2');
}
void startup()
{
phy = agentForService Services.PHYSICAL;
subscribe topic(phy);
router = agentForService Services.ROUTING;
subscribe topic(router);
nodeInfo = agentForService Services.NODE_INFO;
}
void processMessage(Message msg)
{
addr = nodeInfo.address;
nme = nodeInfo.nodeName;
loc = nodeInfo.location;
def datapacket = format.encode(addres: addr, loca: loc[0], loca1: loc[1], loca2: loc[2]);
if (addr==103)
{
datapacket = format.encode(addres: addr, loca: loc[0]-495.0, loca1: loc[1]+150.0, loca2: loc[2]);
nodeInfo.canForward=false;
}
if(msg instanceof DatagramNtf && msg.protocol==Protocol.MAC)
{
def n=rndint(4);
def k=rndint(5);
def delay=(n+1)*(k+1);
println "Broadcast packet received at node "+nme+"location is"+loc[0];
println "Node "+nme+" will respond after "+ delay +" seconds"
println ' '
add new WakerBehavior(delay*1000,{
phy << new TxFrameReq(to: msg.from,
protocol: Protocol.MAC,
data: datapacket)
})
}
}
}