package io.bitsquare.p2p.peers.peerexchange; import io.bitsquare.app.Version; import io.bitsquare.common.persistance.Persistable; import io.bitsquare.common.wire.Payload; import io.bitsquare.p2p.NodeAddress; import java.util.Date; public final class Peer implements Payload, Persistable { // That object is sent over the wire, so we need to take care of version compatibility. private static final long serialVersionUID = Version.P2P_NETWORK_VERSION; private static final int MAX_FAILED_CONNECTION_ATTEMPTS = 5; public final NodeAddress nodeAddress; public final Date date; transient private int failedConnectionAttempts = 0; public Peer(NodeAddress nodeAddress) { this.nodeAddress = nodeAddress; this.date = new Date(); } public void increaseFailedConnectionAttempts() { this.failedConnectionAttempts++; } public boolean tooManyFailedConnectionAttempts() { return failedConnectionAttempts >= MAX_FAILED_CONNECTION_ATTEMPTS; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Peer)) return false; Peer that = (Peer) o; return !(nodeAddress != null ? !nodeAddress.equals(that.nodeAddress) : that.nodeAddress != null); } // We don't use the lastActivityDate for identity @Override public int hashCode() { return nodeAddress != null ? nodeAddress.hashCode() : 0; } @Override public String toString() { return "ReportedPeer{" + "address=" + nodeAddress + ", date=" + date + '}'; } }