📄 parentnode.java
字号:
package mddb.client;
import java.util.*;
import java.net.*;
import java.awt.Point;
import mddb.packets.MddbPacket;
import mddb.client.components.*;
import mddb.client.components.NeighbourList;
/*------------------------------------------------------------------------------
用于描述节点,并作为ClientNode的父类,提供一些必需的通用功能
------------------------------------------------------------------------------*/
public class ParentNode {
//预定义常量------------------------------------------------------------------
public static final String multiAddr = "231.0.0.1"; //多播IP
public static final int multiPort = 9000; //多播地址端口号
public final static int HELLO_STATUS = 0; //节点正向自己的邻居广播HELLO信息和获取反馈的RHELLO信息
public final static int RM_STATUS = 1; //节点正在请求加入选定的组
public final static int OTHER_STATUS = 2; //节点已经分组完毕
//特殊标示常量----------------------------------------------------------------
public static final long NODE_ALL = -1; //代表全体节点
public static final int ANY_DISTANCE = -2; //表示是广播,所以距离不限
public static final int ONE_HOP_DISTANCE = -3;//表示一跳的距离
//节点属性-------------------------------------------------------------------
long ID; //网络标识,移动主机在网络中的唯一标识
long masterId; //节点所属组的master的标识
int range; //节点覆盖范围,即一“跳”(one hop)的最长距离,单位:m
int validRange; //节点有效覆盖范围
long timeStamp; //节点的时间戳
int nodeState; //标识节点状态--有以下三种
Point position;//节点的地址
//节点主要成员----------------------------------------------------------------
GroupAdjacencyList groupAdjacencyList; //组邻接表--只有Master需要维护
NeighbourList nebrList; //节点当前邻居节点信息列表--每个节点都要维护
MemberList mbrList; //成员列表--只有Master需要维护
//为算法增加的变量
ArrayList m_RHELLOList;//RHELLO包保存队列
ArrayList m_DelayQueue;//Delay包保存队列
//==========================================================================
public ParentNode( int rangVal, int validRangVal ,Point nodePosition,long id) {
//设定覆盖范围-----------------
range = rangVal;
validRange = validRangVal;
ID = id;
position = nodePosition;
//----------------------------
nebrList = new NeighbourList();
//节点刚创建的时候都是Master孤点,所以MemberID中应该包含自己
mbrList = new MemberList(this.ID,this.position);
groupAdjacencyList = new GroupAdjacencyList();
m_RHELLOList = new ArrayList();
m_DelayQueue = new ArrayList();
}
//判断自己是否是master节点----------------------------------------------------
public boolean isMaster()
{
synchronized (this){
if( ID == masterId )
return true;
else return false;
}
}
//判断自己是不是孤点
public boolean isAcnode(){
synchronized (this){
if( isMaster() && mbrList.getSize() <= 1 )
return true;
return false;
}
}
//--------------------------------------------------------------------------
public final long getID() {
return ID;
}
public final Point getPosition() {
return position;
}
public final GroupAdjacencyList getGroupAdjacencyList() {
return groupAdjacencyList;
}
public final NeighbourList getNeighbourList() {
return nebrList;
}
public final MemberList getMemberList() {
return mbrList;
}
public final long getMasterId() {
return masterId;
}
public final int getRange() {
return range;
}
public final int getValidRange() {
return validRange;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -