From 6686c280846e1aecabaa23f15ff9b9df8c303490 Mon Sep 17 00:00:00 2001 From: senft-lap Date: Tue, 6 Nov 2012 14:56:19 +0100 Subject: [PATCH] Cleared buffer --- .../src/buffered/BufferedNetworkStack.java | 60 ++++++++++++------- .../buffered/BufferedNetworkStackClient.java | 7 ++- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStack.java b/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStack.java index 396c75f5..760e70c7 100644 --- a/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStack.java +++ b/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStack.java @@ -5,6 +5,7 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.DatagramChannel; +import java.util.ArrayList; import java.util.EmptyStackException; import java.util.Stack; @@ -14,16 +15,18 @@ class BufferedNetworkStack { * One single element on the stack. */ public class Element { + public int id; public String[] cunks; - public Element(int size) { + public Element(int size, int id) { cunks = new String[size]; + this.id = id; System.out.println("Created new Element, size: " + size); } public boolean isComplete() { for (String s : cunks) { - if (s.isEmpty()) { + if (s == null || s.isEmpty()) { return false; } } @@ -31,18 +34,11 @@ class BufferedNetworkStack { } public String toString() { - boolean flag = false; StringBuilder result = new StringBuilder(16); for (String s : cunks) { - if (!s.isEmpty()) { - result.append(s); - flag = true; - } - } - - // Add a flag, if the element is incomplete - if (flag) { - result.append(" (Incomplete)"); + // if (!s.isEmpty()) { + result.append(s); + // } } return result.toString(); @@ -59,11 +55,14 @@ class BufferedNetworkStack { protected static final int BUF_SIZE = 4; - private Stack stack; + private Stack stack; + + private ArrayList temp; public BufferedNetworkStack(final int port) throws IOException { - stack = new Stack(); + stack = new Stack(); + temp = new ArrayList(); channel = DatagramChannel.open(); channel.socket().bind(new InetSocketAddress(port)); @@ -90,7 +89,11 @@ class BufferedNetworkStack { int size = Integer.valueOf(new Character(strReceived.charAt(1)) .toString()); String info = BUF_SIZE + "," + stack.size(); - stack.push(new Element(size)); + + // stack.push(new Element(size)); + // Pick better ID + int id = temp.size(); + temp.add(id, new Element(size, id)); send(info, client); break; @@ -103,17 +106,28 @@ class BufferedNetworkStack { String data = strReceived.substring(3); - System.out.println("Received chunk #" + chunk_id + " of data #" - + data_id + ": " + data); + // System.out.println("Received chunk #" + chunk_id + + // " of data #" + // + data_id + ": " + data); - stack.get(data_id).cunks[chunk_id] = data; + temp.get(data_id).cunks[chunk_id] = data; + + // stack.get(data_id).cunks[chunk_id] = data; + if (temp.get(data_id).isComplete()) { + // Move from temp stack + Element e = temp.get(data_id); + // temp.remove(e); + stack.add(e.toString()); + + // System.out.println("Moved " + e); + } break; case CMD_POP: try { - Element popped = stack.pop(); - send(popped.toString(), client); - System.out.println("Pop " + popped); + // Element popped = stack.pop(); + // send(popped.toString(), client); + // System.out.println("Pop " + popped); } catch (EmptyStackException e) { System.out.println("Received pop but stack is empty"); } @@ -137,8 +151,8 @@ class BufferedNetworkStack { public String toString() { StringBuilder result = new StringBuilder(128); - for (Element e : stack) { - result.append("[").append(e).append("],"); + for (String s : stack) { + result.append("[").append(s).append("],"); } result.append('\n'); diff --git a/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStackClient.java b/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStackClient.java index b46611ca..c6a68eae 100644 --- a/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStackClient.java +++ b/ws2012/P2P/uebungen/2/p2p_ex2/src/buffered/BufferedNetworkStackClient.java @@ -11,11 +11,13 @@ public class BufferedNetworkStackClient { protected static final byte CMD_POP = '2'; protected static final byte CMD_PRINT = '3'; + protected static final int BUF_SIZE = 128; + private DatagramChannel channel = null; private ByteBuffer buf; public BufferedNetworkStackClient() { - buf = ByteBuffer.allocate(1024); + buf = ByteBuffer.allocate(BUF_SIZE); } public void push(String s, String host, int port) throws IOException { @@ -35,7 +37,7 @@ public class BufferedNetworkStackClient { channel.send(buf, dest); buf.flip(); - buf.clear(); + buf = ByteBuffer.allocate(BUF_SIZE); channel.receive(buf); byte[] receivedData = buf.array(); @@ -74,6 +76,7 @@ public class BufferedNetworkStackClient { try { channel.send(buf, dest); + buf.clear(); } catch (IOException e) { e.printStackTrace(); }