/*
 * $Id: DefaultMetricCountingAlgorithm.java,v 1.2 2005/06/30 17:39:06 rampil Exp $
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 *
 */
package org.logical_paradox.rss.dsr.routing.metrics;

import java.rmi.RemoteException;

import org.logical_paradox.rss.dsr.DSRConstant;
import org.logical_paradox.rss.dsr.routing.Node;

/**
 * デフォルトのメトリック計測アルゴリズム
 * 指定された2ノード間でpingをし、応答までにかかった時間をメトリック値とするアルゴリズム
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public class DefaultMetricCountingAlgorithm implements MetricCountingAlgorithm {
	/**
	 * 2ノード間のメトリックを計測する
	 * @param to 相手先のノード
	 * @return 距離(メトリック値)
	 * @throws MetricCountException メトリック計測に失敗
	 */
	public double count(Node to) throws MetricCountException {
		try {
			long now = DSRConstant.datatime.currentTimeInMillis();
			long reach = to.getRegistry().ping();

			// 通信にかかった時間を計測する
			return (double)(reach - now);
		} catch (RemoteException e) {
			// 通信障害が発生した
			throw new MetricCountException(e);
		}
	}

}
