diff --git a/ws2012/P2P/uebungen/4/src/RandomGenerator.java b/ws2012/P2P/uebungen/4/src/RandomGenerator.java index bc4fc240..892be9e7 100644 --- a/ws2012/P2P/uebungen/4/src/RandomGenerator.java +++ b/ws2012/P2P/uebungen/4/src/RandomGenerator.java @@ -6,10 +6,12 @@ import java.util.List; import java.util.Random; import java.util.logging.LogManager; +import analysis.NetworkDumper; + import node.Node; public class RandomGenerator { - public static int initNodeCount = 20; + public static int initNodeCount = 99; public static double initBirthRate = 0.50; public static double initDeathRate = 0.20; public static int initRounds = 13; @@ -47,8 +49,16 @@ public class RandomGenerator { } switch (cmd) { - case "br": - // + case "dump": + nodes.get(0).gatherInformationOfNetwork(); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + NetworkDumper d = new NetworkDumper(nodes.get(0)); + d.write(d.networkToDot(nodes.get(0).getNetwork())); break; case "add": add(count); diff --git a/ws2012/P2P/uebungen/4/src/RandomGenerator2.java b/ws2012/P2P/uebungen/4/src/RandomGenerator2.java index 90cfbcb1..45d37a67 100644 --- a/ws2012/P2P/uebungen/4/src/RandomGenerator2.java +++ b/ws2012/P2P/uebungen/4/src/RandomGenerator2.java @@ -12,6 +12,7 @@ public class RandomGenerator2 { public static double BIRTH_RATE = 0.50; private static int START_NODES = 100; + private static int ROUND_INTERVAL = 1000; // ms public static List nodes = new ArrayList(); public static Random gen = new Random(); @@ -25,10 +26,10 @@ public class RandomGenerator2 { public RandomGenerator2() { firstNode = new Node(); nodes.add(firstNode); - new NetworkDumper(firstNode); + new NetworkDumper(firstNode).start(); - for (int i = 0; i < START_NODES; i++) { - nodes.add(new Node()); + for (int i = 0; i < START_NODES - 1; i++) { + spawn(); } while (true) { @@ -40,7 +41,7 @@ public class RandomGenerator2 { } try { - Thread.sleep(5000); + Thread.sleep(ROUND_INTERVAL); } catch (InterruptedException e) { } } diff --git a/ws2012/P2P/uebungen/4/src/analysis/NetworkDumper.java b/ws2012/P2P/uebungen/4/src/analysis/NetworkDumper.java index 573c926c..75cff37a 100644 --- a/ws2012/P2P/uebungen/4/src/analysis/NetworkDumper.java +++ b/ws2012/P2P/uebungen/4/src/analysis/NetworkDumper.java @@ -11,73 +11,77 @@ import node.Node; public class NetworkDumper implements Runnable { - Node node = null; - private boolean running = true; + Node node = null; + private boolean running = true; - public NetworkDumper(Node n) { - this.node = n; + public NetworkDumper(Node n) { + this.node = n; - new Thread(this).start(); - } + } - public String networkToDot(Map> network) { - StringBuilder result = new StringBuilder(512); - result.append("graph g{\n"); + public void start() { + new Thread(this).start(); + } - Set alreadyIn = new HashSet(); + public String networkToDot(Map> network) { + StringBuilder result = new StringBuilder(512); + result.append("graph g{\n"); - for (Map.Entry> entry : network.entrySet()) { + Set alreadyIn = new HashSet(); - for (String s : entry.getValue()) { - String nodeA = getName(entry.getKey()); - String nodeB = getName(s); + for (Map.Entry> entry : network.entrySet()) { - if (!alreadyIn.contains(nodeB + nodeA)) { + for (String s : entry.getValue()) { + String nodeA = getName(entry.getKey()); + String nodeB = getName(s); - result.append("\t"); - result.append(nodeA).append(" -- ").append(nodeB); - result.append(";\n"); + if (!alreadyIn.contains(nodeB + nodeA)) { - alreadyIn.add(nodeA + nodeB); - } - } - } - result.append("}\n"); - return result.toString(); - } + result.append("\t"); + result.append(nodeA).append(" -- ").append(nodeB); + result.append(";\n"); - private String getName(String s) { - return s.split(":")[1]; - } + alreadyIn.add(nodeA + nodeB); + } + } + } + result.append("}\n"); + return result.toString(); + } - private void write(String s) { - try { - // Create file - FileWriter fstream = new FileWriter("graph.dot"); - BufferedWriter out = new BufferedWriter(fstream); - out.write(s); - // Close the output stream - out.close(); - } catch (Exception e) {// Catch exception if any - System.err.println("Error: " + e.getMessage()); - } - } + private String getName(String s) { + return s.split(":")[1]; + } - @Override - public void run() { - while (running) { - try { - node.gatherInformationOfNetwork(); + public void write(String s) { + try { + // Create file + FileWriter fstream = new FileWriter("graphs/" + + System.currentTimeMillis() + ".dot"); + BufferedWriter out = new BufferedWriter(fstream); + out.write(s); + // Close the output stream + out.close(); + } catch (Exception e) {// Catch exception if any + System.err.println("Error: " + e.getMessage()); + } + } - // Wait 1s to broadcast to network - Thread.sleep(1000); + @Override + public void run() { + while (running) { + try { + node.gatherInformationOfNetwork(); - write(networkToDot(node.getNetwork())); + // Wait 1s to broadcast to network + Thread.sleep(1000); - // Wait 10s for update - Thread.sleep(10000); - } catch (InterruptedException e) { - } - } - } + write(networkToDot(node.getNetwork())); + + // Wait 10s for update + Thread.sleep(10000); + } catch (InterruptedException e) { + } + } + } } diff --git a/ws2012/P2P/uebungen/4/src/node/Node.java b/ws2012/P2P/uebungen/4/src/node/Node.java index 42090706..8947f246 100644 --- a/ws2012/P2P/uebungen/4/src/node/Node.java +++ b/ws2012/P2P/uebungen/4/src/node/Node.java @@ -33,7 +33,7 @@ public class Node { /** * Saves the neighbor of each node in the network */ - private Map> network = new HashMap<>(); + private Map> network = new HashMap>(); private volatile Thread thread; private UDPHandler udpListen; @@ -221,14 +221,14 @@ public class Node { } public void gatherInformationOfNetwork() { - byte[] myAddr; + network = new HashMap>(); + try { - myAddr = BufferUtil.addrToBytes(((InetSocketAddress) channel + byte[] myAddr = BufferUtil.addrToBytes(((InetSocketAddress) channel .getLocalAddress())); sendBroadcast(MessageType.STATUS, myAddr); } catch (IOException e) { } - } protected void setNeighborsOfNode(String node, List neighbors) {