所有路由协议的超类,是一个抽象类。
MessageRouter类:
数据域:
static final String B_SIZE_S = “bufferSize”:每个节点消息缓存大小
static final String MSG_TTL_S = “msgTtl”:消息的生存周期
static final String SND_QUEUE_MODE_S = "sendQueue":发送队列模式,两种——先入先出和随机
static final int RCV_OK = 0,TRY_LATER_BUSY = 1,DENIED_OLD = -1,DENIED_NO_SPACE = -2,DENIED_TTL = -3,DENIED_LOW_RESOURSES = -4,DENIED_POLICY = -5,DENIED_UNSPECIFIED = -99: (0)表示节点接收message并且转发开始,小于0的值表示接收节点并没有接收该信息;大于0的值表示目前不能接收该信息
List<MessageListener> mListeners
HashMap<String, Message> incomingMessages:正在等待转发的消息
HashMap<String, Message> messages:承载的所有消息
HashMap<String, Message> deliveredMessages:该节点作为消息终点接收到的消息
HashMap<String, Object> blacklistedMessage
DTNHost host:本路由所属的节点
int bufferSize:本节点缓存大小
int msgTtl:对于所有消息的TTL
int sendQueueMode:发送队列模式
HashMap<String, Collection<Application>> applications:节点参与的应用
函数域:
构造函数MessageRouter(Settings s)由设置文件创建MessageRouter对象。默认缓存大小是Integer.MAX_VALUE,默认TTL是UNFINITE_TTL,如果配置文件对缓存大小和ttl有设置,则按配置修改,并确认发送队列模式。
void init(DTNHost host, List<MessageListener> mListeners)对于该路由进行初始化。
void update()函数用于仿真时间间隔中更新application。
abstract void changedConnection(Connection con)通知路由连接状态改变。
boolean isDeliveredMessage(Message m)如果该节点作为消息终点接收到参数message,返回true。
void sendMessage(String id, DTNHost to)开始发送message给另一个节点。
int receiveMessage(Message m, DTNHost from)开始接收从另一节点发送过来的message。将接收到信息添加到incomingBuffer中,将本地节点加入到message的路径表中,然后,message监视器得到接受信息。
Message messageTransferred(String id, DTNHost from)当一个message成功被转发,该函数由消息接收端发起。先将转发的message从incoming列表中取出,然后设置接收时间戳;将message交给application(如果有的话),application接收一个输入message,处理后返回一个输出message,如果输出message 被app重新定义了目的地,那么本message将不会算作“转发给了”本节点。判定该message是否到达最终目的,判定是否是第一次被转发(本地节点是最终目的,并且之前没有被转发过)。如果不是最终目的,而且app不想扔掉该message,则将其加入缓存,存入messages表;否则,如果是第一次转发节点,将其添加到deliveredMessages表中;否则,如果没有输出,将其加入黑名单,表示不再接受该message。
void deleteMessage(String id, boolean drop)从缓存中删除message。drop表示,如果这个message被丢弃(比如缓存已满)设为true,如果message由于到达目的被remove则设为false。