Extracted method for sending acks

This commit is contained in:
senft-lap 2012-11-27 16:39:59 +01:00
parent 0b9810aa62
commit 15bdd8a483

View File

@ -69,7 +69,7 @@ public class Node {
// LOGGER.info("Name: " + getName() + ", Spawning new node.");
Node newNode = new Node();
int ack_id = generateAck(MessageType.INVITE, newNode.getAddress());
int ack_id = generateAck(newNode.getAddress());
buf.clear();
buf.put(MessageType.INVITE);
buf.putInt(ack_id);
@ -86,7 +86,14 @@ public class Node {
return newNode;
}
public int generateAck(byte type, SocketAddress addr) {
/**
* Adds a new ack, which this node is expecting to receive.
*
* @param addr
* the SocketAddress the ack should be received from
* @return the identifier for this ack
*/
public int generateAck(SocketAddress addr) {
int ack_id = generator.nextInt();
acks.put(ack_id, new Ack(addr));
return ack_id;
@ -97,11 +104,11 @@ public class Node {
}
private void sendAddrTo(SocketAddress receiver, SocketAddress addr) {
buf.clear();
InetSocketAddress a = (InetSocketAddress) addr;
int ack_id = generateAck(addr);
buf.clear();
buf.put(MessageType.NEW_NEIGHBOR);
int ack_id = generateAck(MessageType.NEW_NEIGHBOR, addr);
buf.putInt(ack_id);
for (String part : a.getHostString().split("\\.")) {
@ -119,6 +126,27 @@ public class Node {
}
}
/**
* Sends an acknowledgment message to receiver (who hopefully is expecting
* it)
*
* @param receiver
* the node expecting an ack
* @param ack_id
* the id to identify the ack
*/
private void sendAckTo(SocketAddress receiver, int ack_id) {
buf.clear();
buf.put(MessageType.ACK);
buf.putInt(ack_id);
buf.flip();
try {
channel.send(buf, receiver);
} catch (IOException e) {
// TODO
}
}
/**
* This node circularly links all neighbors (no mesh!) and removes itself
* from the network.
@ -131,16 +159,14 @@ public class Node {
if (neighbors.size() > 2) {
int pred = ((i - 1) + neighbors.size()) % neighbors.size();
int succ = (i + 1) % neighbors.size();
sendAddrTo(neighbors.get(i), neighbors.get(succ));
sendAddrTo(neighbors.get(i), neighbors.get(pred));
} else if (neighbors.size() == 2) {
sendAddrTo(neighbors.get(i), neighbors.get(Math.abs(i - 1)));
}
buf.clear();
int ack_id = generateAck(MessageType.LEAVE, neighbors.get(i));
int ack_id = generateAck(neighbors.get(i));
buf.put(MessageType.LEAVE);
buf.putInt(ack_id);
buf.flip();
@ -206,11 +232,7 @@ public class Node {
ack_id = buf.getInt();
buf.clear();
buf.put(MessageType.ACK);
buf.putInt(ack_id);
buf.flip();
channel.send(buf, receivedFrom);
sendAckTo(receivedFrom, ack_id);
neighbors.add(receivedFrom);
break;
@ -251,11 +273,7 @@ public class Node {
}
ack_id = buf.getInt();
buf.clear();
buf.put(MessageType.ACK);
buf.putInt(ack_id);
buf.flip();
channel.send(buf, receivedFrom);
sendAckTo(receivedFrom, ack_id);
break;
case MessageType.NEW_NEIGHBOR:
@ -283,11 +301,7 @@ public class Node {
+ new_neighbor.toString());
}
buf.clear();
buf.put(MessageType.ACK);
buf.putInt(ack_id);
buf.flip();
channel.send(buf, receivedFrom);
sendAckTo(receivedFrom, ack_id);
break;