Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7b7221e

Browse filesBrowse files
author
rpytel1
committed
Assignment3: Working code
1 parent ac20efa commit 7b7221e
Copy full SHA for 7b7221e

File tree

1 file changed

+56
-32
lines changed
Filter options

1 file changed

+56
-32
lines changed

‎Assignment3/src/assignment3/node/Node.java

Copy file name to clipboardExpand all lines: Assignment3/src/assignment3/node/Node.java
+56-32Lines changed: 56 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.rmi.RemoteException;
1111
import java.rmi.server.UnicastRemoteObject;
1212
import java.util.*;
13+
import java.util.concurrent.atomic.AtomicInteger;
1314
import java.util.stream.Collector;
1415
import java.util.stream.Collectors;
1516

@@ -27,7 +28,7 @@ public class Node extends UnicastRemoteObject implements IComponent {
2728
private Link bestEdge; //the adjacent edge leading towards the best candidate for the MOE it knows about
2829
private Link testEdge;
2930
private Link inBranch; //the adjacent edge leading to the core of the fragment
30-
public int findCount; // maybe atomic implementation
31+
public AtomicInteger findCount; // maybe atomic implementation
3132

3233
public Node(int id, Queue<Link> links) throws RemoteException {
3334
super();
@@ -43,12 +44,13 @@ public void wakeUp() throws RemoteException {
4344
System.out.println(id + ":Wakeup");
4445

4546
Link edge = links.peek();
47+
System.out.println(id + ": changing link to " + edge.getReceiver(id) + " to IN_MST");
4648
edge.setState(LinkState.IN_MST);
4749
level = 0;
4850
state = NodeState.FOUND;
49-
findCount = 0;
51+
findCount = new AtomicInteger(0);
5052
Message msg = new Message(MessageType.CONNECT, 0);
51-
System.out.println(id+":Sending Connect to "+edge.getReceiver(id));
53+
System.out.println(id + ":Sending Connect to " + edge.getReceiver(id));
5254
new java.util.Timer().schedule(
5355
new java.util.TimerTask() {
5456
@Override
@@ -60,34 +62,34 @@ public void run() {
6062
}
6163
}
6264
},
63-
0
65+
10
6466
);
6567
}
6668

6769
@Override
6870
public void receive(Message message, Link link) throws RemoteException {
69-
updateLinks(link);
71+
Link myLink = getMyLink(link);
7072
switch (message.getType()) {
7173
case TEST:
72-
receiveTest(message, link);
74+
receiveTest(message, myLink);
7375
break;
7476
case ACCEPT:
75-
receiveAccept(message, link);
77+
receiveAccept(message, myLink);
7678
break;
7779
case CONNECT:
78-
receiveConnect(message, link);
80+
receiveConnect(message, myLink);
7981
break;
8082
case INITIATE:
81-
receiveInitiate(message, link);
83+
receiveInitiate(message, myLink);
8284
break;
8385
case REPORT:
84-
receiveReport(message, link);
86+
receiveReport(message, myLink);
8587
break;
8688
case REJECT:
87-
receiveReject(message, link);
89+
receiveReject(message, myLink);
8890
break;
8991
case CHANGE_ROOT:
90-
receiveChangeRoot(message, link);
92+
receiveChangeRoot(message, myLink);
9193
break;
9294
}
9395
}
@@ -109,13 +111,25 @@ public void send(Message message, Link link) throws RemoteException {
109111

110112
}
111113

114+
private Link getMyLink(Link link) {
115+
List<Link> linkLists = new ArrayList<>(links);
116+
Link linkToUpdate = new Link();
117+
for (Link linkEntry : linkLists) {
118+
if (linkEntry.compareTo(link) == 0) {
119+
linkToUpdate = linkEntry;
120+
}
121+
}
122+
return linkToUpdate;
123+
}
124+
112125
@Override
113126
public void receiveConnect(Message message, Link link) throws RemoteException {
114127
System.out.println(id + ":Receive Connect from " + link.getReceiver(id));
115128
if (state == NodeState.SLEEPING)
116129
wakeUp();
117130
// the case that l < l' and fragment F is absorbed by F'
118131
if (message.getLevel() < this.level) {
132+
System.out.println(id + ": changing link to " + link.getReceiver(id) + " to IN_MST");
119133
link.setState(LinkState.IN_MST); // TODO: to be checked
120134
Message msg = new Message(MessageType.INITIATE, level, fragmentName, state);
121135
new java.util.Timer().schedule(
@@ -132,8 +146,9 @@ public void run() {
132146
},
133147
10
134148
);
135-
if (state == NodeState.FIND)
136-
findCount++;
149+
if (state == NodeState.FIND) {
150+
findCount.getAndIncrement();
151+
}
137152
} else {
138153
if (link.getState() == LinkState.CANDIDATE_IN_MST) {
139154
System.out.println(id + "Connect Appended to queue");
@@ -165,7 +180,7 @@ public void run() {
165180
}
166181
}
167182
},
168-
0);
183+
10);
169184
}
170185
}
171186
}
@@ -180,7 +195,7 @@ private void receiveInitiate(Message message, Link link) throws RemoteException
180195
weightBestAdjacent = Double.POSITIVE_INFINITY;
181196

182197
for (Link adjescentLink : this.links) {//TODO: Not sure if this is the correct one list of links
183-
if (adjescentLink != link && adjescentLink.getState() == LinkState.IN_MST) {
198+
if (adjescentLink.compareTo(link) != 0 && adjescentLink.getState() == LinkState.IN_MST) {
184199
Message msg = new Message(MessageType.INITIATE, level, fragmentName, state);
185200
System.out.println(id + ": Sending Initiate to " + adjescentLink.getReceiver(id));
186201
Link copy = new Link(adjescentLink);
@@ -195,10 +210,11 @@ public void run() {
195210
}
196211
}
197212
},
198-
0
213+
10
199214
);
200215
if (state == NodeState.FIND) {
201-
findCount = findCount + 1; // the messages sent
216+
findCount.getAndIncrement();
217+
// the messages sent
202218
}
203219
}
204220
}
@@ -213,22 +229,26 @@ private void test() throws RemoteException {
213229
testEdge = links.stream().filter(p -> p.getState() == LinkState.CANDIDATE_IN_MST).min(new LinkComparator()).get();
214230
Message msg = new Message(MessageType.TEST, level, fragmentName);
215231
Link copy = new Link(testEdge);
232+
System.out.println(id + ":Sending Receive test to " + testEdge.getReceiver(id));
216233
new java.util.Timer().schedule(
217234
new java.util.TimerTask() {
218235
@Override
219236
public void run() {
220237
try {
221-
System.out.println(id + ":Sending Receive test to " + copy.getReceiver(id));
222-
nodes[copy.getReceiver(id)].receive(msg, copy);
238+
nodes[copy.getReceiver(id)].receive(msg, testEdge);
223239
} catch (RemoteException e) {
224240
e.printStackTrace();
225241
}
226242
}
227243
},
228-
0
244+
10
229245
);
230246
} else {
231-
System.out.println(id + "Changing test edge ");
247+
if (testEdge != null) {
248+
System.out.println(id + "Changing test edge " + testEdge.getReceiver(id) + "to null");
249+
} else {
250+
System.out.println(id + "Changing test edge to null");
251+
}
232252
testEdge = null;
233253
report();
234254
}
@@ -276,11 +296,12 @@ public void run() {
276296
);
277297
} else {
278298
if (link.getState() == LinkState.CANDIDATE_IN_MST) {
299+
System.out.println(id + ": changing link to " + link.getReceiver(id) + " to NOT_IN_MST");
279300
link.setState(LinkState.NOT_IN_MST); //TODO: think about local copies
280301
}
281302
// if the node hasn't set this edge as testEdge then it sends a reject
282303
// because they are in the same fragment with the sender
283-
if (link.compareTo(testEdge) == 0) {
304+
if (link.compareTo(testEdge) != 0) {
284305
System.out.println(id + ":Sending Reject to " + link.getReceiver(id));
285306
Message msg = new Message(MessageType.REJECT);
286307
new java.util.Timer().schedule(
@@ -294,7 +315,7 @@ public void run() {
294315
}
295316
}
296317
},
297-
0
318+
10
298319
);
299320
} else {
300321
test();
@@ -307,6 +328,7 @@ public void run() {
307328
private void receiveReject(Message message, Link link) throws RemoteException {
308329
System.out.println(id + ":Receive Reject from " + link.getReceiver(id));
309330
if (link.getState() == LinkState.CANDIDATE_IN_MST) {
331+
System.out.println(id + ": changing link to " + link.getReceiver(id) + " to NOT_IN_MST");
310332
link.setState(LinkState.NOT_IN_MST);
311333
}
312334
test(); // to find another possible MOE
@@ -323,10 +345,11 @@ private void receiveAccept(Message message, Link link) throws RemoteException {
323345
}
324346

325347
private void report() throws RemoteException {
326-
System.out.println(id + ":Report find_count:" + findCount + " testEdge:" + testEdge);
327-
if (findCount == 0 && testEdge == null) {
348+
System.out.println(id + ":Report find_count:" + findCount.get() + " testEdge:" + testEdge);
349+
if (findCount.get() == 0 && testEdge == null) {
328350
this.state = NodeState.FOUND;
329351
Message msg = new Message(MessageType.REPORT, weightBestAdjacent);
352+
System.out.println(id + ":Sending Report to " + inBranch.getReceiver(id));
330353
new java.util.Timer().schedule(
331354
new java.util.TimerTask() {
332355
@Override
@@ -338,16 +361,16 @@ public void run() {
338361
}
339362
}
340363
},
341-
0
364+
10
342365
);
343366
}
344367
}
345368

346369
@Override
347370
public void receiveReport(Message message, Link link) throws RemoteException {
348-
System.out.println(id + ":Receive Report");
349-
if (!link.equals(inBranch)) {
350-
findCount -= 1;
371+
System.out.println(id + ":Receive Report from " + link.getReceiver(id));
372+
if (link.compareTo(inBranch) != 0) {
373+
findCount.getAndDecrement();
351374
if (message.getWeight() < weightBestAdjacent) {
352375
weightBestAdjacent = message.getWeight();
353376
bestEdge = link;
@@ -374,7 +397,7 @@ public void run() {
374397
else {
375398
if (message.getWeight() == weightBestAdjacent &&
376399
weightBestAdjacent == Double.POSITIVE_INFINITY) {
377-
System.out.println("HAAAAAAAAAAAAAAAAAAAAAAAAAALT");
400+
System.out.println(id+":HAAAAAAAAAAAAAAAAAAAAAAAAAALT");
378401
// TODO: HALT
379402
}
380403
}
@@ -398,13 +421,14 @@ private void changeRoot() throws RemoteException {
398421
public void run() {
399422
try {
400423
nodes[bestEdge.getReceiver(id)].receiveChangeRoot(msg, bestEdge);
424+
System.out.println(id + ": changing bestEdge to " + bestEdge.getReceiver(id) + " to IN_MST");
401425
bestEdge.setState(LinkState.IN_MST);
402426
} catch (RemoteException e) {
403427
e.printStackTrace();
404428
}
405429
}
406430
},
407-
0
431+
10
408432
);
409433

410434
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.