tested and fixed minor problems in store and find. acks are still missing, because we dont send them. need to implement it

This commit is contained in:
Denis 2013-02-10 17:07:36 +01:00
parent 717e0c9c29
commit 72408bb79b
3 changed files with 100 additions and 108 deletions

View File

@ -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) {

View File

@ -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);
}

View File

@ -13,67 +13,67 @@ import node.Node;
import node.NodeIdentifier;
public class RoutingTableImpl implements IRoutingTable {
private Set<NodeIdentifier> entries = new HashSet<NodeIdentifier>();
private Set<NodeIdentifier> entries = new HashSet<NodeIdentifier>();
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<NodeIdentifier> getClosestNodesTo(final Identifier id) {
Set<NodeIdentifier> result = new HashSet<NodeIdentifier>();
@Override
public Set<NodeIdentifier> getClosestNodesTo(final Identifier id) {
Set<NodeIdentifier> result = new HashSet<NodeIdentifier>();
if (entries.size() <= bucketSize) {
result.addAll(entries);
if (entries.size() <= bucketSize) {
result.addAll(entries);
} else {
List<NodeIdentifier> temp = new ArrayList<NodeIdentifier>(entries);
} else {
List<NodeIdentifier> temp = new ArrayList<NodeIdentifier>(entries);
Collections.sort(temp, new Comparator<NodeIdentifier>() {
@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<NodeIdentifier>() {
@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<NodeIdentifier>(temp.subList(0,
Node.BUCKET_SIZE));
}
return result;
}
for (int i = 0; i < bucketSize; i++) {
result.add(temp.get(i));
}
result = new HashSet<NodeIdentifier>(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<NodeIdentifier> getEntries() {
return entries;
}
@Override
public Set<NodeIdentifier> getEntries() {
return entries;
}
}