提交 6772744f 编写于 作者: L liquidsnake@sapo.pt

Fixed some bugs located in the TransferableState class

上级 f351d8b0
......@@ -94,9 +94,18 @@ public class TransferableState implements Serializable {
public boolean equals(Object obj) {
if (obj instanceof TransferableState) {
TransferableState tState = (TransferableState) obj;
if (this.messageBatches.length != tState.messageBatches.length) return false;
if (this.messageBatches == null && tState.messageBatches == null) return true;
if ((this.messageBatches != null && tState.messageBatches == null) ||
(this.messageBatches == null && tState.messageBatches != null)) return false;
if (this.messageBatches != null && tState.messageBatches != null &&
this.messageBatches.length != tState.messageBatches.length) return false;
for (int i = 0; i < this.messageBatches.length; i++)
if (!Arrays.equals(this.messageBatches[i], tState.messageBatches[i])) return false;
return (Arrays.equals(this.state, tState.state) && tState.nextEid == this.nextEid);
}
return false;
......@@ -106,10 +115,14 @@ public class TransferableState implements Serializable {
public int hashCode() {
int hash = 1;
hash = hash * 31 + this.nextEid;
for (int i = 0; i < this.state.length; i++) hash = hash * 31 + (int) this.state[i];
for (int i = 0; i < this.messageBatches.length; i++)
for (int j = 0; j < this.messageBatches[i].length; j++)
hash = hash * 31 + (int) this.messageBatches[i][j];
if (this.state != null)
for (int i = 0; i < this.state.length; i++) hash = hash * 31 + (int) this.state[i];
else hash = hash * 31 + 0;
if (this.messageBatches != null)
for (int i = 0; i < this.messageBatches.length; i++)
for (int j = 0; j < this.messageBatches[i].length; j++)
hash = hash * 31 + (int) this.messageBatches[i][j];
else hash = hash * 31 + 0;
return hash;
}
}
......@@ -973,22 +973,29 @@ public final class TOMLayer extends Thread implements RequestReceiver {
stateManager.addState(msg.getSender(),msg.getState());
if (stateManager.moreThenF_Replies()) {
/************************* TESTE *************************
System.out.println("Recebi um estado valido!");
System.out.println("Quem enviou: " + msg.getSender());
System.out.println("Que tipo: " + msg.getType());
System.out.println("Que EID pedido: " + msg.getEid());
System.out.println("Que EID do estado: " + msg.getState().getCurrentCheckpointEid());
System.exit(0);
/************************* TESTE *************************/
TransferableState state = stateManager.getValidState();
if (state != null) {
stateManager.getLog().update(msg.getState());
/************************* TESTE *************************
System.out.println("Tenho um estado valido!");
System.out.println("Estado pedido: " + msg.getEid());
System.out.println("EID do estado: " + state.getCurrentCheckpointEid());
System.out.println("Numero de batches: " + state.getMessageBatches().length);
int value = 0;
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (state.getState()[i] & 0x000000FF) << shift;
}
System.out.println("Valor do estado: " + value);
System.exit(0);
/************************* TESTE *************************/
//receiver.setState(state);
}
else if (stateManager.getReplies() >= (2 * conf.getF())) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册