The One Simulator源码阅读

160 阅读5分钟

1 applications

  包含模拟器的核心类和接口

1.1 PingApplication:

  这是一个简单的ping应用,这个应用被设置为发送ping命令并接收,发送消息回应。其中,引用report包中的PingAppReport来记录该应用的表现。

  Ping_Passive(被动模式,不发送ping只接收并回应)

  Ping_Interval(Ping产生的时间间隔)

  Ping_Offset(Ping间隔偏差,为了防止同时发送ping)

  Ping_Dest_Range(终点地址的范围)

  Ping_Seed(这个app的随机种子)

  Ping_Ping_Size(ping的消息大小)

  Pong_Pong_Size(pong的消息大小)

  App_ID

  handle(Message msg, DTNHost host):处理消息,如果这个消息是ping,那么就回应一个pong的消息。它生成ping和pong的消息,msg(收到的消息),host(应用程序实例需要的主机)

  randomHost():从目标范围随机画主机

  update(DTNHost host):如果是活动的应用程序实例则发送ping包

2 core

2.1 Application

  applications的基础类,每一个拥有应用运行的节点会在消息处理前通过application中的handle()方法发送给应用。每一次模拟的循环中applications的update方法都会被调用

  需要对application进行设置,挑选一个特殊的application实例名字并且设置它的type属性:

	mySimpleApp.type = SimpleApplication

  这些application可以分配给节点组通过:

	Group1.application =mySimpleApp
  • handle(Message msg, DTNHost host) 当拥有这个application的Node节点收到消息时,就还是利用这个方法处理信息,并返回一系列消息,传播。

  • update() 每个循环进行更新

  • setAppID(String appID) 设置application ID,在创建application时设置,不推荐在模拟时更改。

  • setAppListeners (List aListeners)

  • sendEventToListeners(String event, Object params,DTNHost host)

2.2 ApplicationListener

   想要接受消息的report class 都应该实现这个接口,需要知道是哪个application

2.3 ArithmeticCondition

   算术包

  • ArithmeticCondition(String cond)

    创建算术环境,必须有 大于符号 小于符号 等于符号 中的一个和一个双精度浮点数。

  • isTrueFor(double value) 查看是否满足“值 运算符 数字”的形式

2.4 CBRConnection

   两个DTN节点之间的固定比特率连接

  • CBRConnection(DTNHost fromNode, NetworkInterface fromInterface,DTNHost toNode, NetworkInterface toInterface, int connectionSpeed) 在节点中建立新的连接

  • startTransfer(DTNHost from, Message m) 设置消息这个连接正在传送,如果连接被其他事件控制则不需要

  • abortTransfer() 退出transfer的状态

  • getTransferDoneTime()

  • isMessageTransferred()

  • getSpeed() 返回连接目前速度

  • getRemainingByteCount() 返回被传输的字节数量

2.5 Connection

  两个DTN节点中的一个连接

  • Connection(DTNHost fromNode, NetworkInterface fromInterface, DTNHost toNode, NetworkInterface toInterface) 创建新的连接

  • isInitiator(DTNHost node) 判断给出节点是否是这个连接的创始者

  • startTransfer(DTNHost from, Message m) 同 CBRConnection 中的startTransfer

  • clearMsgOnFly() 清除正在传输的消息

  • finalizeTransfer() 结束传送,正在传送的消息无法被接收到

   其余方法可自行参考源码

2.6 ConnectionListener

   想要接收消息的节点的接口

  • hostsConnected(DTNHost host1, DTNHost host2) 连接两个DTN host

  • hostsDisconnected(DTNHost host1, DTNHost host2)

2.7 Constants

   全局常量

2.8 Coord

   二维坐标类,进行简单的运算和转换

2.9 Debug

   打印调试信息和时间戳

2.10 DTN2Manager

   管理外部聚集层连接到DTND,解析配置文件并设置CLAParsers和EID->主机映射

  • DTN2Reporter 解析从one到dtnd的消息的reporter

  • DTN2Events 解析从dtnd到one的消息的事件

  • EID到DTNHost映射元素

    public static class EIDHost {
        public String	EID;
        public int		host_id;
        public DTNHost	host;
        public EIDHost(String eid, int host_id, DTNHost host) {
            this.EID = eid;
            this.host = host;
            this.host_id = host_id;
        }
    }
    
  • setup(World world) 通过解析在 DTN2.configFile 中定义的配置文件设置dtnd连接

  • setReporter(DTN2Reporter reporter) 设置DTN2Reporter,用来从one到dtnd传递消息

   其余还有设置事件、解析器等方法

2.11 DTNHost

  DTN host的一些方法

  • getNextAddress() 返回一个新的网络接口地址并且为了后续调用增加地址

  • isMovementActive() 判断节点是否移动

  • setRouter(MessageRouter router) 为host设置路由

  • getComBus() 返回这个host的模块通信bus

  • move(double timeIncrement) 移动节点在路径上,如果没有则等待

  • setNextWaypoint() 设置下一个目标点和和速度

  还有一些其他关于消息的方法

2.12 DTNSim

   模拟器的主要类

  • main(String[] args)

    ATCH_MODE_FLAG:batch mode 和 text UI启动,batch mode 必须有runs的数量

    RANGE_DELIMETER

    setRunIndex(int) 需要设置文件

  • registerForReset(String className) 注册一个要重置的类,在每一批次运行模拟器后重置类的状态到初始状态

2.13 Message

  消息(在节点创建时建立或被传输在两个节点之间)

2.14 MessageListener

  消息监听类的接口

2.15 ModuleCommunication

   Intermodule communication bus. 可以发送数据,订阅数据变化,轮询数据值等,类似于message class中的属性接口,但这里的值被节点共享

2.16 ModuleCommunicationListener

  在ModuleCommunicationBuses监听变量值

2.17 MovementListener

  节点移动信息接口类

2.18 NetworkInterface

  DTNHost的网络接口,检测hosts的连接性

2.19 Settings

  模拟器设置接口,存储在setting文件夹中,在init之前必须将这个类初始化,如果未初始化仅有 DEF_SETTINGS_FILE被读取。

2.20 SettingError

2.21 SimClock

  时钟,检查模拟时间

2.22 SimError

2.23 SimScenario

  一个被用于获取和存储一次模拟运行的设置

2.24 UpdateListener

   监听更新

2.25 VBRConnetction

  两个DTN节点之间的联系,发送速度每一轮更新一次。

2.26 World

  World 包含了所有的节点并负责更新它们的位置和联系。

3 input

NROF_SETTING 要加载的事件队列总数是用变量定义的

Events.nrof = 3

使用语法配置单独的事件队列

EventsN.variable = value
Events1.filePath = ee/messages.txt
Events2.class = RandomMessageGenerator

外部事件文件被使用当变量 PATH_SETTING被使用来定义事件文件路径并且事件生成器类被CLASS_SETTING定义且加载