Extracted method for sending acks
This commit is contained in:
parent
0b9810aa62
commit
15bdd8a483
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user