ONE源码阅读之源码结构

        借用ONE写了一个专利,过程中,仔细分析了ONE源码,并在其基础上写了不少代码,在这里做一下总结。

        源码中,重要的包由core,gui,input,movement,report,routing,ui。其中,core是整个系统的核心实现源码;gui是GUI界面的实现;input是输入模块的实现,对于仿真系统来说,定时消息也是输入;movement是运动模型的实现;report是日志模块的实现,包括各种数据的统计,都在这里实现;routing是路由器的实现;ui是UI模块,包括textUI(控制台终端)和GUI两种。

        源码中,很多地方使用了一种松耦合的父子类的覆盖实现。在core中定义并实现了简单的仿真系统接口,其他几个模块根据接口实现具体的实现,在运行时根据配置文件动态选择子类的实现,这样整个系统实现了功能模块的裁剪。

core/connection.java:

该类是host节点的连接状态类。一个connection标识了连接的两端节点、当前传输速度、已传输字节数、传输结束的时间。

core/connectionListener.java:

该类是connection的状态监听类,负责监听连接的状态变化,该类是接口类,report中有相关的实现。

core/ConnectivityGrid.java:

该类是一个网格类。在ONE仿真系统中,整个仿真世界被分割为矩形的网格,网格尺寸大于节点辐射直径,这样的话,网格中的节点只可能与以下几种节点有通信关系:同网格、与自己所在网格相邻的网格中的节点。这样设计主要是为了加快节点状态更新,减少没必要的节点遍历。

core/DTNHost.java:

该类是节点类,即仿真系统中的通信节点。节点属性有当前坐标、目的坐标、当前网格、消息路由器、网络连接管理器、运动模型、最近要走的运动路径、运动速度、下一次动作的时间、communicationBus属性。其中,有两类监听器:messageListener、MovementListener。这两类监听器的实现在report包中。(ONE中大量使用接口,很多类中只是声明了一个接口,具体干嘛,则由另外的类来实现,甚至接口是以参数形式传进来的,像DTNHost,host本身也不知道listener具体要干什么,当然,他也没必要知道)

core/DTNSim.java:

这个 是仿真系统的main函数的实现地方。分析源码的话,可以从这里入手。

core/message.java:

这是仿真消息类。仿真消息包括以下属性:目的节点、出生节点(哪个节点产生的这个消息)、消息id、消息经过的路径path、创建时间、消息到达目的地时间、最近经过的节点。

core/NetworkLayer.java:

这是节点connection管理器。因为节点运动,节点与节点的连接状态实时在变化,该类负责管理节点的connection。

core/setting.java:

这是配置文件(比如default.txt)的解析类。

core/simClock.java:

这是仿真时间管理器。

core/world.java:

这是仿真世界模型的实现。包括刷新节点状态、初始化仿真场景并初始化所有仿真节点、初始化事件模型。其实,对于仿真系统来说,只需要在每一个嘀嗒通知world update一下所有节点的状态即可。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值