@@ -58,7 +58,7 @@ public void wakeUp() throws RemoteException {
58
58
public void run () {
59
59
try {
60
60
int receiverId = edge .getReceiver (id );
61
- Thread .sleep (10 );
61
+ Thread .sleep (100 );
62
62
nodes [receiverId ].receive (msg , edge );
63
63
} catch (RemoteException e ) {
64
64
e .printStackTrace ();
@@ -72,7 +72,12 @@ public void run() {
72
72
}
73
73
74
74
@ Override
75
- public void receive (Message message , Link link ) throws RemoteException {
75
+ public synchronized void receive (Message message , Link link ) throws RemoteException {
76
+ try {
77
+ Thread .sleep ((long )(new Random ().nextDouble ()*10 ));
78
+ } catch (InterruptedException e ) {
79
+ e .printStackTrace ();
80
+ }
76
81
Link myLink = getMyLink (link );
77
82
switch (message .getType ()) {
78
83
case TEST :
@@ -97,9 +102,12 @@ public void receive(Message message, Link link) throws RemoteException {
97
102
receiveChangeRoot (message , myLink );
98
103
break ;
99
104
}
105
+ if (testEdge != null ) {
106
+ System .out .println (id + ": test edge " + id + " to " + testEdge .getReceiver (id ) + " fragment " + fragmentName );
107
+ }
100
108
}
101
109
102
- public void updateLinks (Link link ) {
110
+ public synchronized void updateLinks (Link link ) {
103
111
List <Link > linkLists = new ArrayList <>(links );
104
112
Link linkToUpdate = new Link ();
105
113
for (Link linkEntry : linkLists ) {
@@ -116,7 +124,7 @@ public void send(Message message, Link link) throws RemoteException {
116
124
117
125
}
118
126
119
- private Link getMyLink (Link link ) {
127
+ private synchronized Link getMyLink (Link link ) {
120
128
List <Link > linkLists = new ArrayList <>(links );
121
129
Link linkToUpdate = new Link ();
122
130
for (Link linkEntry : linkLists ) {
@@ -135,21 +143,24 @@ public synchronized void receiveConnect(Message message, Link link) throws Remot
135
143
// the case that l < l' and fragment F is absorbed by F'
136
144
if (message .getLevel () < this .level ) {
137
145
System .out .println (id + ": changing link to " + link .getReceiver (id ) + " to IN_MST" );
138
- link .setState (LinkState .IN_MST ); // TODO: to be checked
146
+ link .setState (LinkState .IN_MST );
139
147
Message msg = new Message (MessageType .INITIATE , level , fragmentName , state );
140
148
new java .util .Timer ().schedule (
141
149
new java .util .TimerTask () {
142
150
@ Override
143
151
public void run () {
144
152
try {
145
153
System .out .println (id + "Sending Receive Initiate to " + link .getReceiver (id ));
154
+ Thread .sleep (100 );
146
155
nodes [link .getReceiver (id )].receive (msg , link );
147
156
} catch (RemoteException e ) {
148
157
e .printStackTrace ();
158
+ } catch (InterruptedException e ) {
159
+ e .printStackTrace ();
149
160
}
150
161
}
151
162
},
152
- 10
163
+ 0
153
164
);
154
165
if (state == NodeState .FIND ) {
155
166
System .out .println (id + ": Connect Incrementing findcount" );
@@ -164,7 +175,7 @@ public void run() {
164
175
@ Override
165
176
public void run () {
166
177
try {
167
- Thread .sleep (300 );
178
+ Thread .sleep (3000 );
168
179
nodes [id ].receive (message , link );
169
180
} catch (RemoteException e ) {
170
181
e .printStackTrace ();
@@ -184,7 +195,7 @@ public void run() {
184
195
public void run () {
185
196
try {
186
197
int receiverId = link .getReceiver (id );
187
- Thread .sleep (40 );//It is added to preserve order of messages sended from certain node
198
+ Thread .sleep (400 );//It is added to preserve order of messages sended from certain node
188
199
nodes [receiverId ].receive (msg , link );
189
200
} catch (RemoteException e ) {
190
201
e .printStackTrace ();
@@ -217,7 +228,7 @@ private synchronized void receiveInitiate(Message message, Link link) throws Rem
217
228
public void run () {
218
229
try {
219
230
Link copy = new Link (adjescentLink );
220
- Thread .sleep (10 );
231
+ Thread .sleep (100 );
221
232
nodes [copy .getReceiver (id )].receive (msg , copy );
222
233
} catch (RemoteException e ) {
223
234
e .printStackTrace ();
@@ -244,15 +255,16 @@ private synchronized void test() throws RemoteException {
244
255
System .out .println (id + ":Test" );
245
256
if (links .stream ().anyMatch (p -> p .getState () == LinkState .CANDIDATE_IN_MST )) {
246
257
testEdge = links .stream ().filter (p -> p .getState () == LinkState .CANDIDATE_IN_MST ).min (new LinkComparator ()).get ();
258
+
247
259
Message msg = new Message (MessageType .TEST , level , fragmentName );
248
- System .out .println (id + ":Sending Receive test to " + testEdge .getReceiver (id ));
260
+ System .out .println (id + ":Sending Receive test to " + testEdge .getReceiver (id ) + " fragment" + fragmentName );
249
261
int reciverID = testEdge .getReceiver (id );
250
262
new java .util .Timer ().schedule (
251
263
new java .util .TimerTask () {
252
264
@ Override
253
265
public void run () {
254
266
try {
255
- Thread .sleep (10 );
267
+ Thread .sleep (100 );
256
268
nodes [reciverID ].receive (msg , testEdge );
257
269
} catch (RemoteException e ) {
258
270
e .printStackTrace ();
@@ -277,6 +289,7 @@ public void run() {
277
289
@ Override
278
290
public synchronized void receiveTest (Message message , Link link ) throws RemoteException {
279
291
System .out .println (id + ":Receive Test from " + link .getReceiver (id ));
292
+
280
293
if (state == NodeState .SLEEPING ) {
281
294
wakeUp ();
282
295
}
@@ -288,7 +301,7 @@ public synchronized void receiveTest(Message message, Link link) throws RemoteEx
288
301
@ Override
289
302
public void run () {
290
303
try {
291
- Thread .sleep (300 );
304
+ Thread .sleep (3000 );
292
305
nodes [id ].receiveTest (message , link );
293
306
} catch (RemoteException e ) {
294
307
e .printStackTrace ();
@@ -310,7 +323,7 @@ public void run() {
310
323
@ Override
311
324
public void run () {
312
325
try {
313
- Thread .sleep (10 );
326
+ Thread .sleep (100 );
314
327
nodes [link .getReceiver (id )].receive (msg , link );
315
328
} catch (RemoteException e ) {
316
329
e .printStackTrace ();
@@ -324,10 +337,18 @@ public void run() {
324
337
} else {
325
338
if (link .getState () == LinkState .CANDIDATE_IN_MST ) {
326
339
System .out .println (id + ": changing link to " + link .getReceiver (id ) + " to NOT_IN_MST" );
327
- link .setState (LinkState .NOT_IN_MST ); //TODO: think about local copies
340
+ link .setState (LinkState .NOT_IN_MST ); //TODO: maybe should change test edge to null?
328
341
}
329
342
// if the node hasn't set this edge as testEdge then it sends a reject
330
343
// because they are in the same fragment with the sender
344
+ if (testEdge != null ) {
345
+ System .out .println (id + ":" + testEdge .getWeight () + " " + link .getWeight ());
346
+ System .out .println (id + ":" + link .compareTo (testEdge ));
347
+
348
+ } else {
349
+
350
+ System .out .println (id + ": test edge null" );
351
+ }
331
352
if (link .compareTo (testEdge ) != 0 ) {
332
353
333
354
new java .util .Timer ().schedule (
@@ -337,7 +358,7 @@ public void run() {
337
358
try {
338
359
System .out .println (id + ":Sending Reject to " + link .getReceiver (id ));
339
360
Message msg = new Message (MessageType .REJECT );
340
- Thread .sleep (10 );
361
+ Thread .sleep (100 );
341
362
nodes [link .getReceiver (id )].receive (msg , link );
342
363
} catch (RemoteException e ) {
343
364
e .printStackTrace ();
@@ -367,9 +388,7 @@ private synchronized void receiveReject(Message message, Link link) throws Remot
367
388
368
389
private synchronized void receiveAccept (Message message , Link link ) throws RemoteException {
369
390
System .out .println (id + ":Receive Accept from " + link .getReceiver (id ));
370
- System .out .println (id + ": Changing test edge from" + link .getReceiver (id ) + " to null" );
371
391
testEdge = null ;
372
- System .out .println (id + ": Accept " + link .getWeight () + " " + weightBestAdjacent );
373
392
if (link .getWeight () < weightBestAdjacent ) {
374
393
bestEdge = link ;
375
394
weightBestAdjacent = link .getWeight ();
@@ -392,7 +411,7 @@ private synchronized void report() throws RemoteException {
392
411
public void run () {
393
412
try {
394
413
int receiverId = inBranch .getReceiver (id );
395
- Thread .sleep (10 );
414
+ Thread .sleep (100 );
396
415
nodes [receiverId ].receive (msg , inBranch );
397
416
} catch (RemoteException e ) {
398
417
e .printStackTrace ();
@@ -416,20 +435,19 @@ public synchronized void receiveReport(Message message, Link link) throws Remote
416
435
System .out .println (id + ": Report " + message .getWeight () + " " + weightBestAdjacent );
417
436
if (message .getWeight () < weightBestAdjacent ) {
418
437
weightBestAdjacent = message .getWeight ();
419
- System .out .println (id + ": Report BestEdge changed from " + bestEdge .getReceiver (id ) + "to " + bestEdge .getReceiver (id ));
438
+ // System.out.println(id + ": Report BestEdge changed from " + bestEdge.getReceiver(id) + "to " + bestEdge.getReceiver(id));
420
439
bestEdge = link ;
421
440
}
422
441
report ();
423
442
} else {
424
443
if (this .state == NodeState .FIND ) {
425
- // TODO: append message to the message queue
426
444
System .out .println ("Adding report to the queue" );
427
445
new java .util .Timer ().schedule (
428
446
new java .util .TimerTask () {
429
447
@ Override
430
448
public void run () {
431
449
try {
432
- Thread .sleep (500 );
450
+ Thread .sleep (5000 );
433
451
nodes [id ].receive (message , link );
434
452
} catch (RemoteException e ) {
435
453
e .printStackTrace ();
@@ -458,14 +476,13 @@ private void changeRoot() throws RemoteException {
458
476
459
477
if (bestEdge .getState () == LinkState .IN_MST ) {
460
478
Message msg = new Message (MessageType .CHANGE_ROOT );
461
- // TODO: check if bestEdge is adjacent to the node
462
479
new java .util .Timer ().schedule (
463
480
new java .util .TimerTask () {
464
481
@ Override
465
482
public void run () {
466
483
try {
467
484
int receiverId = bestEdge .getReceiver (id );
468
- Thread .sleep (10 );
485
+ Thread .sleep (100 );
469
486
System .out .println (id + ":Sending change root to " + receiverId );
470
487
nodes [receiverId ].receive (msg , bestEdge );
471
488
@@ -480,7 +497,6 @@ public void run() {
480
497
);
481
498
} else {
482
499
Message msg = new Message (MessageType .CONNECT , level );
483
- // TODO: check if bestEdge is adjacent to the node
484
500
System .out .println (id + ":Sending connect message " + bestEdge .getReceiver (id ));
485
501
new java .util .Timer ().schedule (
486
502
new java .util .TimerTask () {
@@ -489,7 +505,7 @@ public void run() {
489
505
try {
490
506
Link copy = new Link (bestEdge );
491
507
int receiverId = copy .getReceiver (id );
492
- Thread .sleep (10 );
508
+ Thread .sleep (100 );
493
509
nodes [receiverId ].receive (msg , copy );
494
510
} catch (RemoteException e ) {
495
511
e .printStackTrace ();
0 commit comments