Как отправить ответ на корневой узел и одновременно сообщение на дочерние узлы?

#c #simulation #omnet

Вопрос:

В Omnet я создал сеть, в которой корневой узел отправлял сообщение дочерним узлам. Дочерний узел отправляет подтверждение корневому узлу и отправляет другое сообщение своим дочерним узлам, но мой код также отправляет сообщение корневому узлу. Я хочу предотвратить отправку нового сообщения на корневой узел. Код подтверждения является:

 cGate * sender = msg->getSenderGate();
            for (cModule::GateIterator i(this); !i.end(); i  )
            {
                 cGate *gate = i();
                 std::string gateStr = gate->getName();
                 if (gateStr == "out" amp;amp; gate->getPathEndGate()->getOwnerModule() == sender->getOwnerModule() )
                 {
                     int senderId = gate->getIndex();
                     cMessage *reply=new cMessage("reply");
                     send(reply, "out", senderId);
                 }

            }
 

и код для отправки нового сообщения дочерним узлам являются:

  for (int i = 0; i < gateSize("out"); i  ) {

                                    cMessage *l2 = new cMessage ("l2");
                                    send(l2, "out", i);
            }
 

Ответ №1:

Можете ли вы использовать inout ворота. Если да, то сделайте так, чтобы код для отправки нового сообщения был похож на:

 cGate * sender = msg->getSenderGate();
            for (cModule::GateIterator i(this); !i.end(); i  ){
                          if(i!=sender){
                                    cMessage *l2 = new cMessage ("l2");
                                    send(l2, "out", i);
                          }
            }
 

В противном случае подумайте о создании отдельных интерфейсов с одним входным и одним выходным шлюзом, а затем отметьте, с какого интерфейса пришло сообщение. Как в структуре INET: MacRelayUnitBase.cc:71