亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? topology.java

?? p2p仿真
?? JAVA
字號:
/*
 * @(#)Topology.java	ver 1.2  6/20/2005
 *
 * Copyright 2005 Weishuai Yang (wyang@cs.binghamton.edu). 
 * All rights reserved.
 * 
 */

package gps.network;

import java.util.LinkedList;
import java.util.Properties;
import java.util.logging.Logger;

import gps.network.graph.Graph;
import gps.network.graph.Link;
import gps.network.graph.Node;
import gps.util.FloydWarshall;
import gps.util.LogFormatter;


/**
 * provides network topology information
 *
 * @author  Weishuai Yang
 * @version 1.0,  4/18/2005
 */
public class Topology {
	/**
	 * singleton reference to debug log
	 */
	protected static Logger mDebugLog = Logger.getLogger("Debug");
	/**
	 * singleton instance
	 */
	protected static Topology mInstance=null;
	/**
	 * matrix holding delay information between any two nodes
	 */
	protected float[][] mDelayMatrix=null;
	/**
	 * matrix holding predecessor information between any two nodes
	 */
	protected int[][] mPredecessorMatrix=null;
	/**
	 * node array
	 */
	protected Node[] mNode=null;
	/**
	 * link array
	 */
	protected Link[] mLink=null; 
	/**
	 * total node number
	 */
	protected int mTotalNodeNum=0;
	
	
	/**
	 * gets the singleton instance of topology
	 * @return topology instance
	 */
	public static synchronized Topology getInstance() {
		if(mInstance==null)
			mInstance=new Topology();
		return mInstance;
	}
	
	/**
	 * dummy constructor
	 */
	public Topology(){}
	/**
	 * resets topology
	 */
	public void reset(){
	    
        if(mNode!=null)
	        for (int i = 0; i < mNode.length; i++)
	            if(mNode[i]!=null){
	                mNode[i].reset();
	            }

        if(mLink!=null)
	        for (int i = 0; i < mLink.length; i++)
	            if(mLink[i]!=null){
	                mLink[i].reset();
	            }
	    
		mDelayMatrix=null;
		mPredecessorMatrix=null;
		mNode=null;
		mLink=null; 
		mTotalNodeNum=0;
		
	}
	/**
	 * gets delay between two nodes represented by id
	 *
	 * @param node1 source node id
	 * @param node2 destination node id
	 * @return delay
	 */
	public double getDelay(int node1, int node2){
		if(node1>mTotalNodeNum||node2>mTotalNodeNum){
			mDebugLog.severe("Node "+node1+ " or Node "+node2+"exceeds total node number!");
			return 0;
		}
		return mDelayMatrix[node1][node2];
	}


	
	/**
	 * gets delay between two nodes
	 *
	 * @param node1 source node
	 * @param node2 destination node
	 * @return delay
	 */
	public double getDelay(Node node1, Node node2){
		return getDelay(node1.getID(), node2.getID());
	}


	/**
	 * gets bandwidth of a link
	 * 
	 * @param l  the link
	 * @return bandwidth
	 */
	public double getBandwidth(Link l){
		return l.getBandwidthManager().getBandwidth();	
	}
	/**
	 * gets available bandwidth of a link
	 *
	 * @param l  the link
	 * @return available bandwidth
	 */
	public double getAvailableBandwidth(Link l){
		return l.getBandwidthManager().getAvailableBandwidth();	
	}


	/**
	 * gets the node instance from it's id
	 *
	 * @param id  node id
	 * @return node
	 * 
	 */
	public Node getNode(int id){

		if(id>mTotalNodeNum){
			mDebugLog.severe("Node "+id+ "exceeds total node number!");
			return null;
		}	
		if(mNode[id].getID()!=id)
			mDebugLog.severe("ID retrieved from "+mNode[id]+"doesn't match"+id);
		
		//if(id<=mSAgentNum){ //it should be Server
		//	if(!mNode[id].getClass().isInstance(Server.class))
		//		mDebugLog.severe("ID retrieved from "+mNode[id]+"should be Server since it's id "+id+" < "+mPAgentNum);
		//}		
		//mNode[0] is null
		return mNode[id];
	}

	/**
	 * gets all nodes
	 * @return array of nodes
	 */
	public Node[] getNodes(){
		return mNode;
	}
	/**
	 * gets all links
	 * @return array of links
	 */
	public Link[] getLinks(){
		return mLink;
	}

	/**
	 * constructs topology from graph file and properties
	 * @param g graph object
	 * @param p simulator properties
	 */
	public void confNetwork(Graph g, Properties p){
		
		Properties mProperties=p;
		
		Link[] links=g.getAllLinks();
		mNode=g.getAllNodes();
		mLink=g.getAllLinks();
		
		
		mTotalNodeNum=mNode.length;

		mDelayMatrix=new float[mTotalNodeNum][mTotalNodeNum];

		for(int i=0;i<mTotalNodeNum;i++){
			for(int j=0;j<mTotalNodeNum;j++)
				mDelayMatrix[i][j]=0;
		}
		
		
		//set type of links
		for ( int i=0; i<links.length; i++ ) {
		    
		    int f=links[i].fromNode();
		    int t=links[i].toNode();
		    
		    int type = 0;
		    // link type: 0=S-S, 1=S-T, 2=T-T
            
		    if((mNode[f].getProperties().getType()==16)&&(mNode[t].getProperties().getType()==16)){
		        type=2;
		    }
		    else if((mNode[f].getProperties().getType()==16)||(mNode[t].getProperties().getType()==16)){
		        type=1;
		    }

	        links[i].getProperties().setType(type);

	        //set reference from node to link
	        mNode[links[i].fromNode()].hasLinkTo(mNode[links[i].toNode()], links[i]);
			
			//if it's not directed, also add to the other side
			if(!links[i].getProperties().getDirection())
				mNode[links[i].toNode()].hasLinkTo(mNode[links[i].fromNode()], links[i]);
    
		}
		
		
		
		float ttd = Float.parseFloat(mProperties.getProperty("DelayTT"));
		float tsd = Float.parseFloat(mProperties.getProperty("DelayTS"));
		float ssd = Float.parseFloat(mProperties.getProperty("DelaySS"));
		
		double ttb = Double.parseDouble(mProperties.getProperty("BandwidthTT"));
		double tsb = Double.parseDouble(mProperties.getProperty("BandwidthTS"));
		double ssb = Double.parseDouble(mProperties.getProperty("BandwidthSS"));
		
		double mss = Double.parseDouble(mProperties.getProperty("MSS"));
		double rtt = Double.parseDouble(mProperties.getProperty("RTT"));
		double loss = Double.parseDouble(mProperties.getProperty("P"));
		double c = Double.parseDouble(mProperties.getProperty("C"));
		
		//KBytes
		double newttb, newtsb, newssb;
		boolean cong=Boolean.parseBoolean(mProperties.getProperty("CongestionEstimation"));
		if(cong)
		{
			newttb=calcBandwidth(mss,rtt,loss,c,ttd);
			newtsb=calcBandwidth(mss,rtt,loss,c,tsd);
			newssb=calcBandwidth(mss,rtt,loss,c,ssd);
			
		}
			
		else{
			//Mbps->Bytes per sec
			newttb=ttb*1000000/(float)8;
			newtsb=tsb*1000000/(float)8;
			newssb=ssb*1000000/(float)8;
		}
		
	    //debug begin
	    StringBuffer ss=new StringBuffer("Bandwidth Information:\n CongestionEstimation:"+ cong + "\n");
	   ss.append(LogFormatter.sprintf("TT Bandwidth: % 10.5f KBytes \n", newttb/1024));
	   ss.append(LogFormatter.sprintf("TS Bandwidth: % 10.5f KBytes \n", newtsb/1024));
	   ss.append(LogFormatter.sprintf("SS Bandwidth: % 10.5f KBytes \n", newssb/1024));
	    mDebugLog.info(""+ss);
		
		for(int i=0;i<links.length;i++){
			if(links[i].getProperties().getType()==2){
				links[i].setDelay(ttd/(float)1000);
				links[i].setBandwidth(newttb);
				mDelayMatrix[links[i].fromNode()][links[i].toNode()]=ttd/(float)1000;
				mDelayMatrix[links[i].toNode()][links[i].fromNode()]=ttd/(float)1000;
			}
			else if(links[i].getProperties().getType()==1){
				links[i].setDelay(tsd/(float)1000);
				links[i].setBandwidth(newtsb);
				mDelayMatrix[links[i].fromNode()][links[i].toNode()]=tsd/(float)1000;
				mDelayMatrix[links[i].toNode()][links[i].fromNode()]=tsd/(float)1000;

			}
			else if(links[i].getProperties().getType()==0){
				links[i].setDelay(ssd/(float)1000);
				links[i].setBandwidth(newssb);
				mDelayMatrix[links[i].fromNode()][links[i].toNode()]=ssd/(float)1000;
				mDelayMatrix[links[i].toNode()][links[i].fromNode()]=ssd/(float)1000;
			}
		}


		//write to ns2 format, for experiment under ns2
		//String ns2filename=mProperties.getProperty("GraphFile");
		//ns2filename+=".tcl";
		//try{ g.writeToNS2(ns2filename);	} catch(Exception e){}



	    //debug begin
	    StringBuffer s0=new StringBuffer("Delay Information before floydwarshall:\n");
	    for(int i=0;i<mTotalNodeNum;i++){
	    	s0.append("Node "+i+" to others:");
	    	for(int j=0;j<mTotalNodeNum;j++){

	    		s0.append(LogFormatter.sprintf(" % 6.1f ms  ", mDelayMatrix[i][j]*1000));

	    	}
	    	s0.append("\n");
	    }
	    mDebugLog.info(""+s0);
	  
	    
	  FloydWarshall fwAlg = new FloydWarshall();
      fwAlg.initialize(mTotalNodeNum);
      mDelayMatrix = fwAlg.allPairsShortestPaths (mDelayMatrix);
	  mPredecessorMatrix = fwAlg.getPK();

	    //debug begin
	    StringBuffer s=new StringBuffer("Delay Information after floydwarshall:\n");
	    for(int i=0;i<mTotalNodeNum;i++){
	    	s.append("Node "+i+" to others:");
	    	for(int j=0;j<mTotalNodeNum;j++){
	    		s.append(LogFormatter.sprintf(" % 6.1f ms  ", mDelayMatrix[i][j]*1000));
	    	}
	    	s.append("\n");
	    }
	    mDebugLog.info(""+s);
	      
		mDebugLog.info("Bandwidth Information reading finish: between Transits:"+ttb+", between transit and stub:"+tsb+", between stubs:"+ssb+"\n");
	    //debug end
	}
	
	
	/**
	 * gets links between two nodes, which may or may not connect to each other
	 * @param node1 source node
	 * @param node2 destination node
	 * @return link array for links along these two nodes, null if no link exists
	 */
	public Link[] getLinksBetween(Node node1, Node node2){
		
		if(node1==node2) return null;
		
		int i=node1.getID();
		int j=node2.getID();
		
		int pre=mPredecessorMatrix[i][j];
		
		if(pre==-1){
			mDebugLog.severe("Trying to get Link between unconnected nodes: "+node1+" and "+node2);
			return null;
		}
		else if(pre==i){
			Link[] link1=new Link[1];
			link1[0]=getLinkBetween(node1, node2);
			return link1;
		}
		
		LinkedList links=new LinkedList();
		int lastpre=j;
		do{
			Link l=getLinkBetween(getNode(pre), getNode(lastpre));
		    links.addFirst(l);
		    lastpre=pre;
		    pre=mPredecessorMatrix[i][pre];

		}
		while(pre!=-1);   //because Pk[i][i]==-1
		
		Link[] ret=new Link[links.size()];
		for(int m=0;m<links.size();m++)
			ret[m]=(Link)links.get(m);
		return ret;

	}
	
	
	/**
	 * gets link between two directly connected nodes
	 * @return direct link between two nodes, null if no link exists
	 */
	public Link getLinkBetween(Node node1, Node node2){
		return node1.getLinkTo(node2);
	}
	
	
	/**
	 * calculate bandwidth through tcp formula
	 * @return calculated bandwidth
	 */
	
	public double	calcBandwidth(double mss, double rtt, double p, double c,double delay){
		//delay is not used for calculating bandwidth in this model, but may be used in other models
	    return mss*c*1000/(rtt*Math.sqrt(p));
	};
	
	
	
	
	
///////////////following functions are depreciated ///////////////
	
	
	
	/**
	 *  setBandwidth reads bandwidth info from configuration file and set to links, needs modification
	 */
	 
	 /*
	public void setBandwidth(String file){
	    FileInputStream infile;
	    if(file==null){
			mDebugLog.severe("set bandwidth from null file");
			return;
		}
				
	    try
	    {      
			infile=new FileInputStream(file);
			BufferedReader rdr=new BufferedReader(new InputStreamReader(infile));
			String s;
			StringTokenizer tk;
			int i=0;
			
			while((s=rdr.readLine())!=null)
			{	
				s.trim();
				//not empty
				if(s.length()==0) continue;
				//not comments
				if(s.charAt(0)=='#') continue;
				
				//i is current line number, only accept line 0 for in Bandwidth, and line 1 for out Bandwidth
				if(i>1) return;					
				
				
				tk=new StringTokenizer(s,",");
				//it should contain mTotalNodeNum tokens
				if(tk.countTokens()!=mTotalNodeNum){
					mDebugLog.warning("Bandwidth config file format error! Line "+i+" is supposed to have "+mTotalNodeNum+"columns, but only have "+tk.countTokens());				
				}
			
				if(i==0)
					for(int j=1;j<=mTotalNodeNum;j++){
						double bdw=Double.parseDouble(tk.nextToken());
						mNode[j].setInBandwidth(bdw*1024);
					}
				else
					for(int j=1;j<=mTotalNodeNum;j++){
						double bdw=Double.parseDouble(tk.nextToken());
						mNode[j].setOutBandwidth(bdw*1024);
					}
				i++;
			}
			infile.close();
	    }
	    catch (FileNotFoundException e)
	    {
	      System.err.println(file + " not found");
	    }
	    catch (IOException e){
	    	System.err.println(file + " io exception");
	    }
	    catch (Exception e){
	    	System.err.println(e);
	    	e.printStackTrace();
	    }
	}
	
	
	*/
	
	
	/**
	 * setDelay reads delay info from configuration file and store in Topology, needs modificaiton	 
	 *
	 */
	
	/*
	public void setDelay(String file){
		
	    FileInputStream infile;
	    if(file==null){
			mDebugLog.severe("set delay from null file");
			return;
		}
	    try
	    {      
			infile=new FileInputStream(file);
			BufferedReader rdr=new BufferedReader(new InputStreamReader(infile));
			String s;
			StringTokenizer tk;
			int i=0;
			
			while((s=rdr.readLine())!=null)
			{	
				s.trim();
				//not empty
				if(s.length()==0) continue;
				//not comments
				if(s.charAt(0)=='#') continue;
				
				//i is current node id
				i++;
				if(i>mTotalNodeNum) 
					break;
					
				
				tk=new StringTokenizer(s,",");
				//it should contain mTotalNodeNum tokens
				if(tk.countTokens()!=mTotalNodeNum){
					mDebugLog.warning("Delay config file format error! Line "+i+" is supposed to have "+mTotalNodeNum+"columns, but only have "+tk.countTokens());				
				}
			
				for(int j=1;j<=mTotalNodeNum;j++){
					float delay=Float.parseFloat(tk.nextToken());
					mDelayMatrix[i][j]=delay/1000.0;
				}
			}
			infile.close();
	    }
	    catch (FileNotFoundException e)
	    {
	      System.err.println(file + " not found");
	    }
	    catch (IOException e){
	    	System.err.println(file + " io exception");
	    }
	    catch (Exception e){
		    System.err.println(e);
	    	e.printStackTrace();
	    }
	    
	}
	*/
	/**
	 * confNetwork reads configuration and config delay and bandwidth, needs modification
	 */
	/*
	public void confNetwork(String bfile, String dfile){

		setDelay(dfile);
		setBandwidth(bfile);
	    
	}
	*/
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线精品视频小说1| 欧洲一区在线观看| 成人永久免费视频| 欧美亚洲综合久久| 91精品国产综合久久精品麻豆| 99久久er热在这里只有精品66| 99久久99久久综合| 欧美一级久久久| 久久久久久黄色| 国产精品视频第一区| 亚洲美女电影在线| 久久不见久久见免费视频1| 国产一区二区三区久久悠悠色av| 99这里只有久久精品视频| 欧美日韩在线一区二区| 欧美国产1区2区| 日韩精彩视频在线观看| 国产不卡免费视频| 欧美日韩大陆在线| 久久久精品tv| 久久99精品久久久久久| 欧美午夜在线观看| 中文字幕在线观看不卡| 国产专区欧美精品| 欧美三级韩国三级日本三斤 | 亚洲欧美日韩国产手机在线| 国内精品久久久久影院薰衣草 | 亚洲欧美影音先锋| 久久99国产精品成人| 欧美裸体一区二区三区| 一区二区三区四区不卡视频| 成人免费视频视频| 欧美国产一区在线| 国产91丝袜在线观看| 国产午夜三级一区二区三| 日韩精品免费视频人成| 欧美日韩国产美女| 三级不卡在线观看| 欧美一卡二卡在线| 精品一区二区三区视频在线观看| 欧美电视剧免费全集观看| 美女视频一区二区三区| 国产亚洲精品福利| 国产成人精品免费视频网站| 久久久国际精品| 91麻豆免费在线观看| 中文字幕日韩av资源站| 91网址在线看| 另类调教123区| 中文av一区二区| 欧美午夜影院一区| 久久福利资源站| 亚洲日穴在线视频| 精品日产卡一卡二卡麻豆| 成人免费电影视频| 偷窥少妇高潮呻吟av久久免费| 精品日韩成人av| 欧美性一区二区| 国产九九视频一区二区三区| 亚洲综合在线第一页| 久久精品视频一区二区三区| 欧美日韩国产不卡| www.在线欧美| 国产激情一区二区三区四区| 亚洲丶国产丶欧美一区二区三区| 久久精品男人的天堂| 日韩欧美综合在线| 在线观看亚洲精品| 色妞www精品视频| 欧美中文一区二区三区| 国产精品白丝jk白祙喷水网站| 亚洲一区在线播放| 亚洲欧洲无码一区二区三区| 久久精品亚洲精品国产欧美| 3d动漫精品啪啪一区二区竹菊| 99久久国产综合精品色伊| 国产成人av一区二区三区在线观看| 老鸭窝一区二区久久精品| 亚洲一二三专区| 亚洲一区二区三区四区不卡| 亚洲视频一区在线| 亚洲精品中文在线| 亚洲一区二区av在线| 五月激情综合网| 日韩精品久久理论片| 久久99这里只有精品| 国产一区福利在线| 国产成人精品亚洲午夜麻豆| 国产成人av影院| 99久久综合色| 欧美日韩成人一区二区| 91 com成人网| 久久综合色综合88| 中文乱码免费一区二区| 亚洲色图都市小说| 日日欢夜夜爽一区| 国产成人在线免费| 欧日韩精品视频| 久久色在线观看| 亚洲一卡二卡三卡四卡五卡| 日产国产高清一区二区三区| 国产精品中文有码| 欧美亚洲日本国产| 国产欧美日产一区| 日韩电影在线免费| 91丨九色丨蝌蚪富婆spa| 日韩视频免费观看高清在线视频| 中文在线资源观看网站视频免费不卡| 亚洲国产精品综合小说图片区| 九九国产精品视频| 欧美综合一区二区三区| 久久久一区二区三区捆绑**| 亚洲成人免费视频| 色呦呦日韩精品| 国产精品成人在线观看| 国产成人在线看| 久久人人爽人人爽| 激情综合网av| 日韩欧美国产一区二区三区| 日韩 欧美一区二区三区| 欧美亚洲精品一区| 亚洲图片激情小说| 懂色中文一区二区在线播放| 日韩精品一区二区在线观看| 亚洲国产精品久久不卡毛片| 欧美在线999| 亚洲与欧洲av电影| 日本道精品一区二区三区| 亚洲欧美视频在线观看| 97久久精品人人澡人人爽| 国产精品久久久久aaaa| 99久久精品国产一区二区三区| 中文文精品字幕一区二区| 国产精品亚洲第一区在线暖暖韩国| 精品福利av导航| 国产一本一道久久香蕉| 欧美国产精品久久| 色素色在线综合| 日韩av一区二区三区四区| 精品三级在线看| 99re66热这里只有精品3直播| 亚洲欧美日韩久久| 69精品人人人人| 国产精品99久久久久久久女警| 国产精品精品国产色婷婷| 欧美日韩一区视频| 日日摸夜夜添夜夜添精品视频| xfplay精品久久| 日本丶国产丶欧美色综合| 日本少妇一区二区| 国产精品不卡一区二区三区| 在线播放中文一区| 国产69精品久久久久777| 亚洲成人一区在线| 综合久久给合久久狠狠狠97色| 欧美精品乱码久久久久久按摩| 国产风韵犹存在线视精品| 午夜精品久久久久久久| 欧美国产精品v| 久久综合国产精品| 欧美日韩大陆一区二区| 91久久精品一区二区| 成人黄色免费短视频| 美女视频第一区二区三区免费观看网站| 国产精品麻豆视频| 久久综合九色欧美综合狠狠| 日韩一区二区三区高清免费看看| 99免费精品在线| 91丨porny丨首页| 9i在线看片成人免费| 成人免费观看av| 国产91丝袜在线观看| 国产福利电影一区二区三区| 精品一区二区三区视频在线观看| 韩国理伦片一区二区三区在线播放| 亚洲一区二区精品视频| 亚洲成人动漫一区| 五月综合激情日本mⅴ| 日韩电影在线一区二区三区| 亚洲国产乱码最新视频| 日韩精品高清不卡| 黑人精品欧美一区二区蜜桃| 国产成人免费9x9x人网站视频| 国产一二三精品| 色老头久久综合| 91精品国产综合久久久久久漫画| 777xxx欧美| 国产精品久久久久久久久久久免费看 | 69堂精品视频| 国产欧美日韩在线| 亚洲国产欧美在线人成| 免费看欧美美女黄的网站| 久久精品国产77777蜜臀| 波多野结衣欧美| 91精品国产欧美一区二区18| 日韩欧美国产电影| 一二三区精品视频| 国产毛片精品国产一区二区三区| 色综合天天综合网国产成人综合天 | 欧美日韩一区中文字幕|