From b994f691a84eafb79f50d849d698753e3338bf49 Mon Sep 17 00:00:00 2001 From: senft-desktop Date: Fri, 30 Nov 2012 12:18:18 +0100 Subject: [PATCH] Really keep track of network when receiving status commands --- ws2012/P2P/uebungen/4/src/node/Node.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/ws2012/P2P/uebungen/4/src/node/Node.java b/ws2012/P2P/uebungen/4/src/node/Node.java index 05e6aedc..8e9207eb 100644 --- a/ws2012/P2P/uebungen/4/src/node/Node.java +++ b/ws2012/P2P/uebungen/4/src/node/Node.java @@ -7,6 +7,7 @@ import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Random; @@ -49,6 +50,8 @@ public class Node { this.name = channel.socket().getLocalSocketAddress().toString(); + network.put(getName(), new LinkedList()); + udpListen = new UDPHandler(this); thread = new Thread(udpListen); thread.start(); @@ -71,7 +74,7 @@ public class Node { Node newNode = new Node(); sendInvite(newNode); - neighbors.add(newNode.getAddress()); + addNeighbor(newNode.getAddress()); return newNode; } @@ -201,13 +204,13 @@ public class Node { buffer.put(command); buffer.put(data); + buffer.flip(); // Needed because the buffer gets cleared after first send, so we save // the current buffer in a byte[] int bytesWrittenToBuffer = buffer.position(); byte[] packet = new byte[bytesWrittenToBuffer]; System.arraycopy(buffer.array(), 0, packet, 0, bytesWrittenToBuffer); - buffer.flip(); for (SocketAddress n : neighbors) { if (!n.equals(receivedFrom)) { @@ -275,9 +278,12 @@ public class Node { return acks.remove(ack_id); } - protected boolean addNeighbor(SocketAddress node) { - if (!hasNeighbor(node)) { - neighbors.add(node); + protected boolean addNeighbor(SocketAddress newNeighbor) { + if (!hasNeighbor(newNeighbor)) { + neighbors.add(newNeighbor); + + network.get(getName()).add(newNeighbor.toString()); + return true; } return false; @@ -370,4 +376,8 @@ public class Node { return result.toString(); } + public Map> getNetwork() { + return network; + } + }