一个p2p仿真软件

源代码在线查看: protocol.java

软件大小: 914 K
上传用户: flashlee2003200
关键词: p2p 仿真软件
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				 * @(#)Protocol.java	ver 1.2  6/20/2005
				 *
				 * Copyright 2005 Weishuai Yang (wyang@cs.binghamton.edu). 
				 * All rights reserved.
				 * 
				 */
				
				package gps.protocol;
				
				import gps.event.SimEventScheduler;
				import gps.network.Topology;
				
				import java.util.Properties;
				import java.util.logging.Logger;
				
				/**
				 * Protocol base class, all specific protocols inherit from it. 
				 *
				 *
				 * @author  Weishuai Yang
				 * @version 1.2,  6/20/2005
				 */
				public class Protocol {
					/**
					 * singleton reference to topology
					 */
					protected static Topology mTopology=Topology.getInstance();
					/**
					 * singleton reference to debug log
					 */
					protected static Logger mDebugLog = Logger.getLogger("Debug");
					/**
					 * singleton reference to trace log
					 */
					protected static Logger mTraceLog = Logger.getLogger("Trace");
					/**
					 * singleton reference to event scheduler
					 */
					protected static SimEventScheduler mScheduler=SimEventScheduler.getInstance();
					
					
					/**
					 * protocol configuration path
					 */
					protected String mProtocolConf=null;
					
					/**
					 * simulator properties
					 */
					protected Properties mSimulatorProperties=null;
					
					/**
					 * protocol properties
					 */
					protected Properties mProtocolProperties=new Properties();
					/**
					 * agent list under this protocol
					 */
					protected Agent[] mAgent=null;
					
					/**
					 * agent number
					 */
					protected int mTotalAgentNum=0;	
					
					/**
					 * peer number
					 */
					protected int mPAgentNum=0;
					
					/**
					 * server number
					 */
					protected int mSAgentNum=0;
					
					/**
					 * dummy constructor
					 */
					public Protocol(){
						/* set default config file path in specific class implementation*/
						//mProtocolConf="config/myprotocol.cfg";
					}
					
					/**
					 * resets status
					 */
					public void reset(){
						//mProtocolProperties=new Properties();
					    
					    if(mAgent!=null)
				            for(int i=0;i 				                if(mAgent[i]!=null)
				                    mAgent[i].reset();
				            }
				
						mAgent=null;
						mTotalAgentNum=0;	
						mPAgentNum=0;
						mSAgentNum=0;
					}
					/**
					 * loads protocol properties, to be overriden
					 * @param path path to the configuration file
					 */
					public void loadProtocolProperties(String path){
						//to be implemented in protocol file
						//for example, BT:
				    	//mProtocolConf="config/bt.cfg";
					    //mProtocolProperties.clear();
						//Config.loadConfFromFile(path, mProtocolProperties);
				    	//int nodeNum=Integer.parseInt(mProtocolProperties.getProperty("BTTrackers"))+Integer.parseInt(mProtocolProperties.getProperty("BTPeers"));
						//mProtocolProperties.setProperty("TotalNodeNum", ""+nodeNum);
					}
				    
					/**
					 * gets simulator properties
					 * @return simulator properties
					 */
				    public Properties getSimulatorProperties(){
					    return mSimulatorProperties;
					}
					/**
					 * sets simulator properties
					 * @param p simulator properties
					 */
					public void setSimulatorProperties(Properties p){
					    mSimulatorProperties = p;
					}
				
					/**
					 * gets protocol properties
					 * @return protocol properties
					 */
				    public Properties getProtocolProperties(){
					    return mProtocolProperties;
					}
					/**
					 * sets protocol properties
					 * @param p protocol properties
					 */
					public Properties setProtocolProperties(Properties p){
					    return mProtocolProperties = p;
					}
					
					/**
					 * gets delay between two agents
					 *
					 * @param agent1 source agent id
					 * @param agent2 destination agent id
					 */
					public double getDelayAgent(int agent1, int agent2){
						if(agent1>mTotalAgentNum||agent2>mTotalAgentNum){
							mDebugLog.severe("Agent "+agent1+ " or Agent "+agent2+"exceeds total agent number!");
							return 0;
						}
						return mTopology.getDelay(mAgent[agent1].getNode(), mAgent[agent2].getNode());
					}
				
					/**
					 * gets delay between two agents
					 *
					 * @param agent1 source agent
					 * @param agent2 destination agent
					 */
					public double getDelayAgent(Agent agent1, Agent agent2){
						return getDelayAgent(agent1.getID(), agent2.getID());
					}
				
					/**
					 * gets the agent instance from it's id
					 *
					 * @param id agent id
					 * 
					 */
					public Agent getAgent(int id){
						if(id>mTotalAgentNum){
							mDebugLog.severe("Node "+id+ "exceeds total node number!");
							return null;
						}	
						if(mAgent[id].getID()!=id)
							mDebugLog.severe("ID retrieved from "+mAgent[id]+"doesn't match"+id);
						
						return mAgent[id];
					}
					
					/**
					 * gets agent object list
					 *
					 * @return array of agents
					 * 
					 */
					public Agent[] getAgentList(){
						return mAgent;
					}
					/**
					 * sets agent number
					 *
					 * @param num new agent number
					 * 
					 */
					public void setAgentNum(int num){
						mTotalAgentNum=num;
						mAgent=new Agent[mTotalAgentNum+1];
					}
					/**
					 * sets an agent object at the specified locaiton
					 *
					 * @param index the index of the agent
					 * @param a agent object
					 * 
					 */
					public void setAgent(int index, Agent a){
						mAgent[index]=a;
					}
					
					
					/**
					 * sets the agent number in this topology, this method is used for p2p networks with servers and peers
					 *
					 * @param snum is number of peer agents
					 * @param pnum is number of server agents
					 *
					 */
					public void setAgentNum(int snum, int pnum){
						mPAgentNum=pnum;
						mSAgentNum=snum;
						mTotalAgentNum=pnum+snum;
						mAgent=new Agent[mTotalAgentNum+1];
						//the initialization of node is done outside of topology
						//mNode[0] is null
					}
					/**
					 * sets an sagent object at the specified locaiton
					 *
					 * @param index the index of the sagent
					 * @param s sagent object
					 * 
					 */
					public void setSAgent(int index, Server s){
						mAgent[index]=s;
					}
					/**
					 * sets an pagent object at the specified locaiton
					 *
					 * @param index the index of the pagent
					 * @param p pagent object
					 * 
					 */
					public void setPAgent(int index, Peer p){
						mAgent[index]=p;
					}
					/**
					 * configure documents for this protocol, to be overriden
					 * 
					 */
					public void confDocuments(){}
					
					/**
					 * configure events for this protocol, to be overriden
					 * 
					 */
					public void confEvents(){}
					/**
					 * configure agents for this protocol, to be overriden
					 * 
					 */
					public void confAgents(){}
				
				}
							

相关资源