diff --git a/ws2012/P2P/uebungen/11/src/node/Node.java b/ws2012/P2P/uebungen/11/src/node/Node.java index c9cacc9a..6c78aa46 100644 --- a/ws2012/P2P/uebungen/11/src/node/Node.java +++ b/ws2012/P2P/uebungen/11/src/node/Node.java @@ -414,6 +414,10 @@ public class Node { return send(n, MessageType.LEAVE, null, false, null); } + public void storeFile(File file){ + files.add(file); + } + private void sendFile(NodeIdentifier nodeID, File file){ diff --git a/ws2012/P2P/uebungen/11/src/node/UDPHandler.java b/ws2012/P2P/uebungen/11/src/node/UDPHandler.java index 0c71c475..b69363a0 100644 --- a/ws2012/P2P/uebungen/11/src/node/UDPHandler.java +++ b/ws2012/P2P/uebungen/11/src/node/UDPHandler.java @@ -1,5 +1,7 @@ package node; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; @@ -18,6 +20,9 @@ public class UDPHandler implements Runnable { private ByteBuffer buffer = ByteBuffer.allocate(BUF_SIZE); private Node node; + + + private String[] tempData; public UDPHandler(Node node) { this.node = node; @@ -200,25 +205,65 @@ 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()); - } + 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); + + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + }else{ + tempData[chunkID] = data; + } + + - String data = sb.toString(); - - String parts[] = data.split("-"); - - // 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 }); + // 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 }); + + } + + private void receivePong(NodeIdentifier fromID, Identifier rpcID) { LOGGER.log(Level.INFO, "Received [PONG] from {0}", new Object[] { fromID });