本文以UML类图方式给出The ONE中DTNHostMessageRouterMessage间的关系,并以示意图的形式给出incomingMessage, messages, deliverredMessages间的联系,即消息在The ONE的流动。

1. UML类图

每个DTNHost有一个MessageRouter(一一对应),MessageRouter有3个关于消息的HashMap。同时,消息的属性包含源DTNHost、目标DTNHost以及消息所经过DTNHost组成的列表(即path),其UML类图如下:

Message Class Diagram

2. Message与MessageRouter

首先,DTNHostMessageRouter是一一对应的,而MessageRouter分别维护着多个消息HashMap(基于哈希表的Map接口的实现),相关源代码如下:

//MessageRouter.java
private HashMap<String, Message> messages;            //The messages this router is carrying
private HashMap<String, Message> incomingMessages;    //The messages being transferred with msgID_hostName keys
private HashMap<String, Message> deliveredMessages;   //The messages this router has received as the final recipient

private HashMap<String, Object> blacklistedMessages;  //The messages that Applications on this router have blacklisted

Message包含如下成员变量:

//Message.java
/*** 标识消息 ***/
private String id;                    //Identifier of the message
private int uniqueId;                 //Unique ID of this message
private int size;                     //Size of the message (bytes)
private static int nextUniqueId;      //Next unique identifier to be given

/*** 记录消息传输路径 ***/
private DTNHost from;
private DTNHost to;
private List<DTNHost> path;           //List of nodes this message has passed

/*** Time to live ***/
private double timeReceived;          //The time this message was received
private double timeCreated;           //The time when this message was created
private int initTtl;                  //Initial TTL of the message
public static final String TTL_SECONDS_S = "Scenario.ttlSeconds";
private static boolean ttlAsSeconds = false;          //ture for seconds, false for minutes
public static final int INFINITE_TTL = -1;            //Value for infinite TTL of message

/*** response message ***/
private int responseSize;              //0 if no response is requested
private Message requestMsg;            //if this message is a response message, this is set to the request msg

/** Container for generic message properties. Note that all values
 * stored in the properties should be immutable because only a shallow
 * copy of the properties is made when replicating messages */
private Map<String, Object> properties;

private String    appID;              //Application ID of the application that created the message

3. 消息缓冲区

The ONE消息的转换如下图所示(visio源文件:The ONE消息转换示意图.vsdx)。新创建的消息放在messages,正在传输的消息放在incomingMessages;传输成功的消息若为目的节点则放在deliverredMessages,否则放在messages

The ONE消息转换

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-03-27 15:53

results matching ""

    No results matching ""