mirror of
https://github.com/ChronosX88/KademliaDHT.git
synced 2024-11-25 03:32:19 +00:00
Working on The ContentLookupReceiver
This commit is contained in:
parent
58f9157c9d
commit
a12e075cec
@ -15,7 +15,7 @@ import kademlia.node.Node;
|
|||||||
public class ContentLookupMessage implements Message
|
public class ContentLookupMessage implements Message
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final byte CODE = 0x47;
|
public static final byte CODE = 0x47;
|
||||||
|
|
||||||
private Node origin;
|
private Node origin;
|
||||||
private GetParameter params;
|
private GetParameter params;
|
||||||
|
57
src/kademlia/message/ContentLookupReceiver.java
Normal file
57
src/kademlia/message/ContentLookupReceiver.java
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package kademlia.message;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import kademlia.core.KadServer;
|
||||||
|
import kademlia.dht.DHT;
|
||||||
|
import kademlia.node.Node;
|
||||||
|
import kademlia.operation.Receiver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Responds to a ContentLookupMessage by sending a ContentMessage containing the requested content;
|
||||||
|
* if the requested content is not found, a NodeReplyMessage containing the K closest nodes to the request key is sent.
|
||||||
|
*
|
||||||
|
* @author Joshua Kissoon
|
||||||
|
* @since 20140226
|
||||||
|
*/
|
||||||
|
public class ContentLookupReceiver implements Receiver
|
||||||
|
{
|
||||||
|
|
||||||
|
private final KadServer server;
|
||||||
|
private final Node localNode;
|
||||||
|
private final DHT dht;
|
||||||
|
|
||||||
|
public ContentLookupReceiver(KadServer server, Node localNode, DHT dht)
|
||||||
|
{
|
||||||
|
this.server = server;
|
||||||
|
this.localNode = localNode;
|
||||||
|
this.dht = dht;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void receive(Message incoming, int comm) throws IOException
|
||||||
|
{
|
||||||
|
ContentLookupMessage msg = (ContentLookupMessage) incoming;
|
||||||
|
|
||||||
|
/* Check if we can have this data */
|
||||||
|
if (this.dht.contains(msg.getParameters()))
|
||||||
|
{
|
||||||
|
/* Return a ContentMessage with the required data */
|
||||||
|
ContentMessage cMsg = new ContentMessage(localNode, this.dht.get(msg.getParameters()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return a the K closest nodes to this content identifier
|
||||||
|
* We create a NodeLookupReceiver and let this receiver handle this operation
|
||||||
|
*/
|
||||||
|
NodeLookupMessage lkpMsg = new NodeLookupMessage(msg.getOrigin(), msg.getParameters().getKey());
|
||||||
|
new NodeLookupReceiver(server, localNode).receive(lkpMsg, comm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void timeout(int comm)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -61,6 +61,8 @@ public class MessageFactory
|
|||||||
return new NodeLookupReceiver(server, this.localNode);
|
return new NodeLookupReceiver(server, this.localNode);
|
||||||
case StoreContentMessage.CODE:
|
case StoreContentMessage.CODE:
|
||||||
return new StoreContentReceiver(server, this.localNode, this.dht);
|
return new StoreContentReceiver(server, this.localNode, this.dht);
|
||||||
|
case ContentLookupMessage.CODE:
|
||||||
|
return new ContentLookupReceiver(server, localNode, dht);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user