1 .report包:告诉我们可以到处那些报告。
在配置文件settings中配置,然后反射注入四类订阅者(ConnectionListener,UpdateListener,MessageListener,
ContactTimesReport四种接口的集合,定义在core包中)里面,然后在不同的事件发生后,对四个订阅者队列进行遍历(四个队列存放在类core.SimScenario中)
2 .routing包:用来指定消息的路由策略,按组指定。
研究算法时需要注重点就应该就是这个包了,如:
DirectDeliveryRouter——只是简单地向最后接收者传递,不会传给别的结点中转
EpidemicRouter——洪泛传输
EnergyAwareRouter——能源算法,考虑到能源的消耗
还有一些比较流行的dtn路由算法的类。
只需继承MessageRouter,覆盖对应的方法,然后加入自己的实现,再在settings配置文件中配置则可。如EpidemicRouter(即洪范路由算法),覆盖了父类的update方法
3 .movement包:节点运动模型,按组指定。
其中,大部分的移动策略(继承MapBaseMovement)都是基于给定的地图文件移动(还可以分为不同的路线类型,如人行道,汽车道等),也有部分为随机移动(RandomWaypoint和RandomWalk)和事件驱动(ExternalMovement和ExtendedMovementModel)
4 .input包:
一类为继承ExternalEvent的消息实体类,基本为每个消息对应一个实体。第二类为实现EventQueue接口的外部事件。其中DTN2Events为与DTNSim2的事件与The One事件的对接
5 .core包:包括一些核心的类和核心的接口等
具体执行流程应该是这样的:
a.读取配置文件。
b.初始化模拟环境,把report,routing等都配置好,并把host生成。
c.初始化模拟时间
d.检验当前时间是否小于模拟时间:是,则跳到e,否,则跳到f
e.模拟环境update,回到d
f.end
其中主要的流程在world.update方法里面,包括:触发事件(消息传输,丢包等),移动host等。
转载于:https://blog.51cto.com/7262254/1626225