Omnet/Inet :如何访问 class/submodules 以获取变量值

Omnet/Inet : how to access class/submodules to get variables values

在我的模拟中有一个移动节点由来自 inet 框架的以下组件组成:

现在我正在研究 UdpApp,它是 UDPVideoStreamCli.cc,它也是 inet 框架作为示例 udp 应用程序之一提供的。

现在你可以从图像中看到,我必须访问 lisp 模块(它是 LispRouting.cc 的一个实例),因为我必须读取一些值或调用一些 public 方法class...我该怎么做?我只知道我必须从

开始
getParentModule()->getSubmodule();

但我不知道如何继续...你能帮忙吗?

(LispRouting *)getParentModule()->getSubmodule("lisp")

会成功的。务必检查返回的指针是否不为空。

通常这是糟糕的设计,因为它硬编码了 LispRouting 模块的名称和相对位置。 naming/architecture 中的任何更改都将导致崩溃。

一个合适的设计是创建一个参数来指定 lisp 子模块的 name/path(具有默认值),然后使用

#include "inet/common/ModuleAccess.h"
...
LispRouting *lr = getModuleFromPar<LispRouting>(par("lispModule"), this);

然后在模块的NED文件中添加一个参数:

string lispModule = default("^.lisp");

意味着您可以找到 lisp 模块的默认位置是:向上一层,然后找到名为 "lisp" 的子模块。这是一个更好的模式,因为用户以后可以在不破坏代码的情况下重新配置 lisp 模块的 name/placement。