*** empty log message ***
[charm.git] / examples / pose / MiniNet / Node.C
1 Node::Node(nodeMsg *m)
2 {
3   nbr1 = m->nbr1;
4   nbr2 = m->nbr2;
5   delete m;
6   transmitMsg *tm;
7   for (int i=0; i<4; i++) { // send to all other nodes
8     if (i != myHandle) { // don't send to self
9       tm = new transmitMsg;
10       tm->src = myHandle;
11       tm->dest = i;
12       strcpy(tm->data," Hello! ");
13       if (nbr1 == i) {
14         POSE_invoke(recv(tm), Node, nbr1, 3); // a hop takes 3 time units
15       }
16       else { // sends to nbr2 or non-nbr always go to nbr2
17         POSE_invoke(recv(tm), Node, nbr2, 3); // a hop takes 3 time units
18       }
19     }
20   }
21 }
22
23 Node::Node()
24 {
25 }
26
27 Node& Node::operator=(const Node& obj)
28 {
29   int i;
30   rep::operator=(obj);
31   nbr1 = obj.nbr1;
32   nbr2 = obj.nbr2;
33   return *this;
34 }
35
36 void Node::recv(transmitMsg *m)
37 {
38   if (m->dest == myHandle) { // this message was for me!
39     parent->CommitPrintf("%d received %s from %d at time %d\n", 
40                          myHandle, m->data, m->src, ovt);
41   }
42   else { // this message is not for me
43     transmitMsg *tm = new transmitMsg;
44     tm->src = m->src;
45     tm->dest = m->dest;
46     strcpy(tm->data, m->data);
47     elapse(1); // It took me a time unit to think about how to route this msg
48     parent->CommitPrintf("%d forwarding message from %d to %d at time %d\n", 
49                          myHandle, m->src, m->dest, ovt);
50     if (nbr1 == tm->dest) { // sophisticated routing algorithm!
51       POSE_invoke(recv(tm), Node, nbr1, 3); // a hop takes 3 time units
52     }
53     else {
54       POSE_invoke(recv(tm), Node, nbr2, 3); // a hop takes 3 time units
55     }
56   }
57 }
58
59 void Node::recv_anti(transmitMsg *m)
60 {
61   restore(this);
62 }
63
64 void Node::recv_commit(transmitMsg *m)
65 {
66 }