@@ -138,7 +138,7 @@ private void receiveReject(Message message, Link link) {
138
138
139
139
}
140
140
141
- private void receiveAccept (Message message , Link link ) {
141
+ private void receiveAccept (Message message , Link link ) throws RemoteException {
142
142
testEdge = null ;
143
143
if (link .getWeight () < weightBestAdjacent ){
144
144
bestEdge = link ;
@@ -147,22 +147,55 @@ private void receiveAccept(Message message, Link link) {
147
147
report ();
148
148
}
149
149
150
- private void report () {
150
+ private void report () throws RemoteException {
151
151
if (findCount ==0 && testEdge .equals (null )){
152
152
this .state = NodeState .FOUND ;
153
153
Message msg = new Message (MessageType .REPORT , weightBestAdjacent );
154
+ nodes [inBranch .getReceiver (id )].receive (msg , inBranch );
154
155
}
155
156
}
156
157
157
- private void receiveReport (Message message , Link link ) {
158
-
158
+ private void receiveReport (Message message , Link link ) throws RemoteException {
159
+ if (!link .equals (inBranch )){
160
+ findCount -=1 ;
161
+ if (message .getWeight () < weightBestAdjacent ){
162
+ weightBestAdjacent = message .getWeight ();
163
+ bestEdge = link ;
164
+ }
165
+ report ();
166
+ }
167
+ else {
168
+ if (this .state == NodeState .FIND ){
169
+ // TODO: append message to the message queue
170
+ }
171
+ else {
172
+ if (message .getWeight () > weightBestAdjacent )
173
+ changeRoot ();
174
+ else {
175
+ if (message .getWeight () == weightBestAdjacent &&
176
+ weightBestAdjacent == Double .POSITIVE_INFINITY ){
177
+ // TODO: HALT
178
+ }
179
+ }
180
+ }
181
+ }
159
182
}
160
183
161
184
private void changeRoot () {
162
-
185
+ if (bestEdge .getState () == LinkState .IN_MST ){
186
+ Message msg = new Message (MessageType .CHANGE_ROOT );
187
+ // TODO: check if bestEdge is adjacent to the node
188
+ nodes [bestEdge .getReceiver (id )].receiveChangeRoot (msg , bestEdge );
189
+ }
190
+ else {
191
+ Message msg = new Message (MessageType .CONNECT , level );
192
+ // TODO: check if bestEdge is adjacent to the node
193
+ nodes [bestEdge .getReceiver (id )].receiveChangeRoot (msg , bestEdge );
194
+ bestEdge .setState (LinkState .IN_MST );
195
+ }
163
196
}
164
197
165
198
private void receiveChangeRoot (Message message , Link link ) {
166
-
199
+ changeRoot ();
167
200
}
168
201
}
0 commit comments