1 .report包:告诉我们可以到处那些报告。

     

    在配置文件settings中配置,然后反射注入四类订阅者(ConnectionListenerUpdateListenerMessageListener

  ContactTimesReport四种接口的集合,定义在core包中)里面,然后在不同的事件发生后,对四个订阅者队列进行遍历(四个队列存放在类core.SimScenario中)


2 .routing包:用来指定消息的路由策略,按组指定。

 

    研究算法时需要注重点就应该就是这个包了,如:

    DirectDeliveryRouter——只是简单地向最后接收者传递,不会传给别的结点中转

    EpidemicRouter——洪泛传输

    EnergyAwareRouter——能源算法,考虑到能源的消耗

    还有一些比较流行的dtn路由算法的类。

只需继承MessageRouter,覆盖对应的方法,然后加入自己的实现,再在settings配置文件中配置则可。如EpidemicRouter(即洪范路由算法),覆盖了父类的update方法

 

3 .movement包:节点运动模型,按组指定。

 

其中,大部分的移动策略(继承MapBaseMovement)都是基于给定的地图文件移动(还可以分为不同的路线类型,如人行道,汽车道等),也有部分为随机移动(RandomWaypointRandomWalk)和事件驱动(ExternalMovementExtendedMovementModel

 

4 .input包:

    一类为继承ExternalEvent的消息实体类,基本为每个消息对应一个实体。第二类为实现EventQueue接口的外部事件。其中DTN2Events为与DTNSim2的事件与The One事件的对接


5 .core包:包括一些核心的类和核心的接口等

     具体执行流程应该是这样的:

         a.读取配置文件。

         b.初始化模拟环境,把reportrouting等都配置好,并把host生成。

         c.初始化模拟时间

         d.检验当前时间是否小于模拟时间:是,则跳到e,否,则跳到f

        e.模拟环境update,回到d

         f.end

    其中主要的流程在world.update方法里面,包括:触发事件(消息传输,丢包等),移动host等。