早上好!
我正在为动态分布式存储网络实施模拟,这需要在某些点上模块之间的连接不同。 (例如,客户端连接到节点(建立新连接)并希望处理存储在不同节点上的数据。)
是否有可能在运行时在两个节点的未连接但现有的门之间建立连接?
例如:
simple node1 {
parameters:
@display(...);
gates:
input in @loose;
output out @loose;
}
simple node2 {
parameters:
@display(...);
gates:
input in @loose;
output out @loose;
}
之后会出现一个无连接的无聊网络定义。 (不知道是否有可能有一个完全空白的定义,但对于我们假设它的最小例子)
在模块的C ++文件中,我希望根据某些条件(伪代码)在这些节点之间创建连接:
if(condition){
node1->setConnection(ownGate("out"),node2->getGates("in"),true);
}else{
node1->setConnection(ownGate("out"),node2->getGates("in"),false);
}
我已经阅读过Omnet ++的模拟手册,但实际上无法弄清楚该怎么做......
有可能这样做吗?怎么样?
感谢您的帮助!
答案 0 :(得分:0)
是的,可以在两个模块之间动态创建连接。可以使用connectTo()方法来执行此操作。
假设网络中包含两个类型的两个节点:
network Test1 {
submodules:
n1 : node1;
n2 : node2;
}
以下代码可用于使用双向连接将n1
连接到n2
:
// code of n1
if(condition) {
cModule * dest = getModuleByPath("n2");
cGate * destGateIn = dest->gate("in");
cGate * thisGateOut = gate("out");
thisGateOut->connectTo(destGateIn); // forward direction
cGate * destGateOut = dest->gate("out");
cGate * thisGateIn = gate("in");
destGateOut->connectTo(thisGateIn); // reverse direction
}