在Omnet ++中在运行时建立与模块的连接

时间:2018-04-06 08:39:44

标签: omnet++

早上好!

我正在为动态分布式存储网络实施模拟,这需要在某些点上模块之间的连接不同。 (例如,客户端连接到节点(建立新连接)并希望处理存储在不同节点上的数据。)

是否有可能在运行时在两个节点的未连接但现有的门之间建立连接?

例如:

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 ++的模拟手册,但实际上无法弄清楚该怎么做......

有可能这样做吗?怎么样?

感谢您的帮助!

1 个答案:

答案 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 
}