OMNet++ 中的 NED 语言学习(3)
本节内容是复合模块,即 Compound modules。
一个复合模块可以拥有gates和参数,但是并没有C++代码与之关联。如果想要为一个复合模块添加代码,可以将代码封装为一个简单模块,然后以子模块的方式来添加到复合模块中。
一个复合模块的声明可以包含若干部分,它们都是可选的:
module Host
{
types: // 在这里定义内部类型,如模块和信道类型等,仅在本地使用
...
parameters:
...
gates:
...
submodules: // 子模块,可以创建子模块向量,子模块的类型可以来自参数
...
connections:// 可以通过循环,条件等创建连接,连接的行为可以通过将信道与连接联系来定义,信道的类型也可以来自参数
...
}
复合模块可以通过继承来扩展,继承时不仅可以加入参数和gates,还可以加入新的子模块和新的连接,但是不能对子模块或连接进行“de-inherit”,或者修改所继承的模块或类型。
下面的例子展示了将普通的协议组装为一个无线的主机的”stub”,并通过subclassing添加用户代理。
module WirelessHostBase
{
gates:
input radioIn;
submodules:
tcp: TCP;
ip: IP;
wlan: Ieee80211;
connections:
tcp.ipOut --> ip.tcpIn;
tcp.ipIn <-- ip.tcpOut;
ip.nicOut++ --> wlan.ipIn;
ip.nicIn++ <-- wlan.ipOut;
wlan.radioIn <-- radioIn;
}
module WirelessUser extends WirelessHostBase
{
submodules:
webAgent: WebAgent;
connections:
webAgent.tcpOut --> tcp.appIn++;
webAgent.tcpIn <-- tcp.appOut++;
}
WirelessUser复合模块可以进一步骤扩展,例如添加一个Ethernet port:
module DesktopUser extends WirelessUser
{
gates:
inout ethg;
submodules:
eth: EthernetNic;
connections:
ip.nicOut++ --> eth.ipIn;
ip.nicIn++ <-- eth.ipOut;
eth.phy <--> ethg;
}
Related posts:
评论