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:
parent
717e0c9c29
commit
72408bb79b
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user