/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.backend.java.lib.net;
import java.util.Set;
import abs.backend.java.lib.runtime.ABSObject;
import abs.backend.java.lib.net.msg.Msg;
public interface Router {
/**
* Update the router with routes from a router from an adjacent node
*/
public void update(NetNode adjacentNode, Router adjacentNodeRouter);
/**
* Register an object that is local to the node
*/
public void register(ABSObject localObject);
/**
* Register a COG that is local to the node
*/
public void register(NetCOG localCOG);
/**
* Replace a route for a COG or register it
* @param nextNode the node that messages to the COG should be routed to; must be either the current node or a node adjacent to the current node
* @param hops the number of hops needed to reach the object given that a message is routed to the given node
*/
public void replace(NetCOG cog, NetNode nextNode, int hops);
/**
* Replace a route for an object or register it
* @param nextNode the node that messages to the object should be routed to; must be either the current node or a node adjacent to the current node
* @param hops the number of hops needed to reach the object given that a message is routed to the given node
*/
public void replace(ABSObject object, NetNode nextNode, int hops);
/**
* Get the node a message should be routed to
*/
public NetNode getNextNode(Msg m);
/**
* Get the route entry for a cog
*/
public RouteEntry getRouteEntry(NetCOG cog);
/**
* Get the (currently best) route entry for an object
*/
public RouteEntry getRouteEntry(ABSObject object);
/**
* Get all objects tracked by the router
*/
public Set<ABSObject> getRegisteredObjects();
/**
* Get all cogs tracked by the router
*/
public Set<NetCOG> getRegisteredCOGs();
}