/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: RoutingAlgorithm.java,v 1.1 2005/06/29 15:57:36 rampil Exp $
 */
package org.logical_paradox.rss.dsr.routing;

/**
 * ルーティングアルゴリズム
 * あるノードが他のどのノードと結合するのが効率がよいかを決定するアルゴリズムをパッケージ化したコンポーネント<br>
 * 各ノードは、自分に関連づいているノード以外は知ることができない(つまり、ネットワークの全体像は知らない)
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public abstract class RoutingAlgorithm {
	/**
	 * このアルゴリズムに関連づいているノード
	 */
	private final Node node_;


	/**
	 * コンストラクタ
	 * @param node アルゴリズムを結合するノード
	 */
	protected RoutingAlgorithm(Node node) {
		node_ = node;
	}

	/**
	 * このアルゴリズムに関連づいているノードを返す
	 * @return ノード
	 */
	protected Node getNode() {
		return node_;
	}

	/**
	 * hugする
	 * @param node hugを要求してきたノード
	 * @return true:許可 / false:拒否
	 */
	public abstract boolean hug(Node node);

	/**
	 * 最適ノード選択を実行する
	 */
	public abstract void configure();

	/**
	 * hugしている全てのノードに対して，分散ネットワークからの離脱を通知する
	 */
	public abstract void notifyDisconnect();
}
