mirror of
https://github.com/ChronosX88/KademliaDHT.git
synced 2024-11-22 10:12:19 +00:00
Routing Table
- Added a routing table interface to code to Interface not implementation
This commit is contained in:
parent
fa242fad6a
commit
66b6a14ebc
83
src/kademlia/routing/KadRoutingTable.java
Normal file
83
src/kademlia/routing/KadRoutingTable.java
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package kademlia.routing;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import kademlia.node.Node;
|
||||||
|
import kademlia.node.NodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specification for Kademlia's Routing Table
|
||||||
|
*
|
||||||
|
* @author Joshua Kissoon
|
||||||
|
* @since 20140501
|
||||||
|
*/
|
||||||
|
public interface KadRoutingTable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the RoutingTable to it's default state
|
||||||
|
*/
|
||||||
|
public void initialize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a contact to the routing table based on how far it is from the LocalNode.
|
||||||
|
*
|
||||||
|
* @param c The contact to add
|
||||||
|
*/
|
||||||
|
public void insert(Contact c);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a node to the routing table based on how far it is from the LocalNode.
|
||||||
|
*
|
||||||
|
* @param n The node to add
|
||||||
|
*/
|
||||||
|
public void insert(Node n);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compute the bucket ID in which a given node should be placed; the bucketId is computed based on how far the node is away from the Local Node.
|
||||||
|
*
|
||||||
|
* @param nid The NodeId for which we want to find which bucket it belong to
|
||||||
|
*
|
||||||
|
* @return Integer The bucket ID in which the given node should be placed.
|
||||||
|
*/
|
||||||
|
public int getBucketId(NodeId nid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the closest set of contacts to a given NodeId
|
||||||
|
*
|
||||||
|
* @param target The NodeId to find contacts close to
|
||||||
|
* @param numNodesRequired The number of contacts to find
|
||||||
|
*
|
||||||
|
* @return List A List of contacts closest to target
|
||||||
|
*/
|
||||||
|
public List<Node> findClosest(NodeId target, int numNodesRequired);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return List A List of all Nodes in this RoutingTable
|
||||||
|
*/
|
||||||
|
public List getAllNodes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return List A List of all Nodes in this RoutingTable
|
||||||
|
*/
|
||||||
|
public List getAllContacts();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Bucket[] The buckets in this Kad Instance
|
||||||
|
*/
|
||||||
|
public KadBucket[] getBuckets();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method used by operations to notify the routing table of any contacts that have been unresponsive.
|
||||||
|
*
|
||||||
|
* @param contacts The set of unresponsive contacts
|
||||||
|
*/
|
||||||
|
public void setUnresponsiveContacts(List<Node> contacts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method used by operations to notify the routing table of any contacts that have been unresponsive.
|
||||||
|
*
|
||||||
|
* @param n
|
||||||
|
*/
|
||||||
|
public void setUnresponsiveContact(Node n);
|
||||||
|
|
||||||
|
}
|
@ -12,7 +12,7 @@ import kademlia.node.NodeId;
|
|||||||
* @author Joshua Kissoon
|
* @author Joshua Kissoon
|
||||||
* @created 20140215
|
* @created 20140215
|
||||||
*/
|
*/
|
||||||
public class RoutingTable
|
public class RoutingTable implements KadRoutingTable
|
||||||
{
|
{
|
||||||
|
|
||||||
private final Node localNode; // The current node
|
private final Node localNode; // The current node
|
||||||
@ -35,6 +35,7 @@ public class RoutingTable
|
|||||||
/**
|
/**
|
||||||
* Initialize the RoutingTable to it's default state
|
* Initialize the RoutingTable to it's default state
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public final void initialize()
|
public final void initialize()
|
||||||
{
|
{
|
||||||
this.buckets = new KadBucket[NodeId.ID_LENGTH];
|
this.buckets = new KadBucket[NodeId.ID_LENGTH];
|
||||||
@ -49,6 +50,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @param c The contact to add
|
* @param c The contact to add
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized final void insert(Contact c)
|
public synchronized final void insert(Contact c)
|
||||||
{
|
{
|
||||||
this.buckets[this.getBucketId(c.getNode().getNodeId())].insert(c);
|
this.buckets[this.getBucketId(c.getNode().getNodeId())].insert(c);
|
||||||
@ -59,6 +61,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @param n The node to add
|
* @param n The node to add
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized final void insert(Node n)
|
public synchronized final void insert(Node n)
|
||||||
{
|
{
|
||||||
this.buckets[this.getBucketId(n.getNodeId())].insert(n);
|
this.buckets[this.getBucketId(n.getNodeId())].insert(n);
|
||||||
@ -71,6 +74,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @return Integer The bucket ID in which the given node should be placed.
|
* @return Integer The bucket ID in which the given node should be placed.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public final int getBucketId(NodeId nid)
|
public final int getBucketId(NodeId nid)
|
||||||
{
|
{
|
||||||
int bId = this.localNode.getNodeId().getDistance(nid) - 1;
|
int bId = this.localNode.getNodeId().getDistance(nid) - 1;
|
||||||
@ -87,6 +91,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @return List A List of contacts closest to target
|
* @return List A List of contacts closest to target
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized final List<Node> findClosest(NodeId target, int numNodesRequired)
|
public synchronized final List<Node> findClosest(NodeId target, int numNodesRequired)
|
||||||
{
|
{
|
||||||
List<Node> closest = new ArrayList<>(numNodesRequired);
|
List<Node> closest = new ArrayList<>(numNodesRequired);
|
||||||
@ -172,6 +177,7 @@ public class RoutingTable
|
|||||||
/**
|
/**
|
||||||
* @return List A List of all Nodes in this RoutingTable
|
* @return List A List of all Nodes in this RoutingTable
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public final List getAllNodes()
|
public final List getAllNodes()
|
||||||
{
|
{
|
||||||
List<Node> nodes = new ArrayList<>();
|
List<Node> nodes = new ArrayList<>();
|
||||||
@ -190,6 +196,7 @@ public class RoutingTable
|
|||||||
/**
|
/**
|
||||||
* @return List A List of all Nodes in this RoutingTable
|
* @return List A List of all Nodes in this RoutingTable
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public final List getAllContacts()
|
public final List getAllContacts()
|
||||||
{
|
{
|
||||||
List<Contact> contacts = new ArrayList<>();
|
List<Contact> contacts = new ArrayList<>();
|
||||||
@ -205,6 +212,7 @@ public class RoutingTable
|
|||||||
/**
|
/**
|
||||||
* @return Bucket[] The buckets in this Kad Instance
|
* @return Bucket[] The buckets in this Kad Instance
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public final KadBucket[] getBuckets()
|
public final KadBucket[] getBuckets()
|
||||||
{
|
{
|
||||||
return this.buckets;
|
return this.buckets;
|
||||||
@ -225,6 +233,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @param contacts The set of unresponsive contacts
|
* @param contacts The set of unresponsive contacts
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void setUnresponsiveContacts(List<Node> contacts)
|
public void setUnresponsiveContacts(List<Node> contacts)
|
||||||
{
|
{
|
||||||
if (contacts.isEmpty())
|
if (contacts.isEmpty())
|
||||||
@ -242,6 +251,7 @@ public class RoutingTable
|
|||||||
*
|
*
|
||||||
* @param n
|
* @param n
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public synchronized void setUnresponsiveContact(Node n)
|
public synchronized void setUnresponsiveContact(Node n)
|
||||||
{
|
{
|
||||||
int bucketId = this.getBucketId(n.getNodeId());
|
int bucketId = this.getBucketId(n.getNodeId());
|
||||||
|
Loading…
Reference in New Issue
Block a user