From 72408bb79b481deeee22093a04e285324bec2208 Mon Sep 17 00:00:00 2001 From: Denis Date: Sun, 10 Feb 2013 17:07:36 +0100 Subject: [PATCH] tested and fixed minor problems in store and find. acks are still missing, because we dont send them. need to implement it --- ws2012/P2P/uebungen/11/src/node/Node.java | 7 +- .../P2P/uebungen/11/src/node/UDPHandler.java | 101 +++++++++--------- .../11/src/routingtable/RoutingTableImpl.java | 100 ++++++++--------- 3 files changed, 100 insertions(+), 108 deletions(-) diff --git a/ws2012/P2P/uebungen/11/src/node/Node.java b/ws2012/P2P/uebungen/11/src/node/Node.java index 62c05356..465cd917 100644 --- a/ws2012/P2P/uebungen/11/src/node/Node.java +++ b/ws2012/P2P/uebungen/11/src/node/Node.java @@ -150,8 +150,8 @@ public class Node { } } - void sendFoundValue(NodeIdentifier receiver, Identifier idToFind) { - boolean successful = send(receiver, MessageType.FOUND_VALUE, values + void sendFoundValue(NodeIdentifier receiver, Identifier idToFind, Identifier rpcID) { + boolean successful = send(receiver, MessageType.FOUND_VALUE, rpcID, values .get(idToFind).getBytes(), true, null); if (successful) { @@ -357,10 +357,7 @@ public class Node { } public void storePair(Identifier key, NodeIdentifier id) { - System.out.println(values.size()); - System.out.println(key.toString()); values.put(key, id); - System.out.println(values.size()); } public void store(Identifier key) { diff --git a/ws2012/P2P/uebungen/11/src/node/UDPHandler.java b/ws2012/P2P/uebungen/11/src/node/UDPHandler.java index 62a3e920..6ca668bb 100644 --- a/ws2012/P2P/uebungen/11/src/node/UDPHandler.java +++ b/ws2012/P2P/uebungen/11/src/node/UDPHandler.java @@ -20,8 +20,7 @@ public class UDPHandler implements Runnable { private ByteBuffer buffer = ByteBuffer.allocate(BUF_SIZE); private Node node; - - + private String[] tempData; public UDPHandler(Node node) { @@ -179,7 +178,11 @@ public class UDPHandler implements Runnable { private void receiveFoundValue(NodeIdentifier fromID, Identifier rpcID) { // TODO Auto-generated method stub // Node kontaktieren, damit Datei gesendet werden kann. - + + // This should be the answer to a prior FIND_VALUE -> mark this RPC ID + // as received + node.receivedRPC(fromID, rpcID); + LOGGER.log(Level.INFO, "Received [FOUND VALUE] from Node {0}", new Object[] { fromID }); } @@ -197,7 +200,8 @@ public class UDPHandler implements Runnable { numReceived++; } - // This should be the answer to a prior FIND_NODE -> mark this RPC ID as + // This should be the answer to a prior FIND_VALUE -> mark this RPC ID + // as // received node.receivedRPC(fromID, rpcID); @@ -208,65 +212,56 @@ public class UDPHandler implements Runnable { private void receiveData(NodeIdentifier fromID, Identifier rpcID) { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); - while (buffer.hasRemaining()) { - sb.append(buffer.get()); - } - - String data = sb.toString(); - - String parts[] = data.split("-"); - - String fileAndChunk[] = parts[0].split("|"); - - String fileID = fileAndChunk[0]; - int chunkID = Integer.parseInt(fileAndChunk[1]); - - data = parts[1]; - - if(data.charAt(data.length()) == '!'){ //last chunk - //file zusammensetzen und im zielnode speichern - File file = new File("fileID"); - FileWriter fw; + while (buffer.hasRemaining()) { + sb.append(buffer.get()); + } + + String data = sb.toString(); + + String parts[] = data.split("-"); + + String fileAndChunk[] = parts[0].split("|"); + + String fileID = fileAndChunk[0]; + int chunkID = Integer.parseInt(fileAndChunk[1]); + + data = parts[1]; + + if (data.charAt(data.length()) == '!') { // last chunk + // file zusammensetzen und im zielnode speichern + File file = new File("fileID"); + FileWriter fw; try { - + fw = new FileWriter(file); - for(int i = 0; i < tempData.length; i++){ - fw.write(tempData[i]); - } - fw.flush(); - - - //store file in node - node.storeFile(file); - - + for (int i = 0; i < tempData.length; i++) { + fw.write(tempData[i]); + } + fw.flush(); + + // store file in node + node.storeFile(file); + } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } - - - - }else{ - tempData[chunkID] = data; - } - - - // This should be the answer to a prior FIND_NODE -> mark this RPC ID as - // received - node.receivedRPC(fromID, rpcID); + } else { + tempData[chunkID] = data; + } + + // This should be the answer to a prior FIND_NODE -> mark this RPC ID as + // received + node.receivedRPC(fromID, rpcID); + + LOGGER.log(Level.INFO, "Received [DATA] [{0}] from Node {1})", + new Object[] { data.toString(), fromID }); - LOGGER.log(Level.INFO, "Received [DATA] [{0}] from Node {1})", - new Object[] { data.toString(), fromID }); - - } - - private void receivePong(NodeIdentifier fromID, Identifier rpcID) { LOGGER.log(Level.INFO, "Received [PONG] from {0}", new Object[] { fromID }); @@ -329,7 +324,7 @@ public class UDPHandler implements Runnable { new Object[] { fileID, fromID }); if (node.hasKey(fileID)) { - node.sendFoundValue(fromID, fileID); + node.sendFoundValue(fromID, fileID, rpcID); } else { node.sendClosestNodesTo(fromID, fileID, rpcID, false); } diff --git a/ws2012/P2P/uebungen/11/src/routingtable/RoutingTableImpl.java b/ws2012/P2P/uebungen/11/src/routingtable/RoutingTableImpl.java index 70b070ed..5a36c499 100644 --- a/ws2012/P2P/uebungen/11/src/routingtable/RoutingTableImpl.java +++ b/ws2012/P2P/uebungen/11/src/routingtable/RoutingTableImpl.java @@ -13,67 +13,67 @@ import node.Node; import node.NodeIdentifier; public class RoutingTableImpl implements IRoutingTable { - private Set entries = new HashSet(); + private Set entries = new HashSet(); - private Bucket root; + private Bucket root; - private int bucketSize; + private int bucketSize; - public RoutingTableImpl(int bucketSize, Node node) { - this.bucketSize = bucketSize; - this.root = new Bucket(bucketSize, 0, node); - } + public RoutingTableImpl(int bucketSize, Node node) { + this.bucketSize = bucketSize; + this.root = new Bucket(bucketSize, 0, node); + } - @Override - public void insert(NodeIdentifier id) { - if (root.contains(id)) { - root.update(id); - } else { - entries.add(id); - root.insert(id); - } - } + @Override + public void insert(NodeIdentifier id) { + if (root.contains(id)) { + root.update(id); + } else { + entries.add(id); + root.insert(id); + } + } - @Override - public Set getClosestNodesTo(final Identifier id) { - Set result = new HashSet(); + @Override + public Set getClosestNodesTo(final Identifier id) { + Set result = new HashSet(); - if (entries.size() <= bucketSize) { - result.addAll(entries); + if (entries.size() <= bucketSize) { + result.addAll(entries); - } else { - List temp = new ArrayList(entries); + } else { + List temp = new ArrayList(entries); - Collections.sort(temp, new Comparator() { - @Override - public int compare(NodeIdentifier o1, NodeIdentifier o2) { - BigInteger dist1 = id.distanceTo(o1); - BigInteger dist2 = id.distanceTo(o2); - return dist1.compareTo(dist2); - } - }); + Collections.sort(temp, new Comparator() { + @Override + public int compare(NodeIdentifier o1, NodeIdentifier o2) { + BigInteger dist1 = id.distanceTo(o1); + BigInteger dist2 = id.distanceTo(o2); + return dist1.compareTo(dist2); + } + }); - for (int i = 0; i < bucketSize; i++) { - result.add(temp.get(i)); - } - result = new HashSet(temp.subList(0, - Node.BUCKET_SIZE)); - } - return result; - } + for (int i = 0; i < bucketSize; i++) { + result.add(temp.get(i)); + } + result = new HashSet(temp.subList(0, + Node.BUCKET_SIZE)); + } + return result; + } - @Override - public boolean contains(NodeIdentifier node) { - return root.contains(node); - } + @Override + public boolean contains(NodeIdentifier node) { + return root.contains(node); + } - @Override - public void remove(NodeIdentifier node) { + @Override + public void remove(NodeIdentifier node) { - } + } - @Override - public Set getEntries() { - return entries; - } + @Override + public Set getEntries() { + return entries; + } } \ No newline at end of file