package lsr.common;
/**
* Keeps data related with replica like id, hostname and port numbers required
* for replicas to communicate with each other, and by clients to connect to
* replicas.
*/
public class PID {
private final String hostname;
private final int replicaPort;
private final int clientPort;
private final int id;
/**
* Creates new process identifier.
*
* @param id - process id
* @param hostname - name of host used to connect to this process
* @param replicaPort - port number used by other replicas
* @param clientPort - port number used by clients
*/
public PID(int id, String hostname, int replicaPort, int clientPort) {
if (hostname == null) {
throw new NullPointerException("Hostname field cannot be null");
}
this.id = id;
this.clientPort = clientPort;
this.hostname = hostname;
this.replicaPort = replicaPort;
}
/**
* Returns the hostname used by replicas and clients to connect.
*
* @return the name of host
*/
public String getHostname() {
return hostname;
}
/**
* Return the port number used by other replicas to connect to this replica.
*
* @return port number
*/
public int getReplicaPort() {
return replicaPort;
}
/**
* Returns the port number used by client to connect to this replica.
*
* @return port number
*/
public int getClientPort() {
return clientPort;
}
/**
* Returns unique id of this replica.
*
* @return process id
*/
public int getId() {
return id;
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || (obj.getClass() != this.getClass())) {
return false;
}
PID pid = (PID) obj;
return hostname.equals(pid.hostname) && replicaPort == pid.replicaPort;
}
public int hashCode() {
int hash = 7;
hash = 31 * hash + hostname.hashCode();
hash = 31 * hash + replicaPort;
hash = 31 * hash + clientPort;
hash = 31 * hash + id;
return hash;
}
public String toString() {
return "[p" + id + "] " + hostname + ", ports = (replica=" + replicaPort + ", client=" +
clientPort + ")";
}
}