2016-05-30 4 views
1

Ich verwende mehrere Adhoc-Hosts in meinem Netzwerk, und ich brauche Zeiger auf alle Adhoc-Hosts im Netzwerk in meiner UDPApp.cc-Datei. Wenn ich getParentModule() verwende, bekomme ich Zugriff auf nur das Modul, auf dem diese Anwendung aufgerufen wird. Also, wenn es 3 Hosts-> Host1, Host2 und Host3 gibt. Ich bekomme Zugriff auf nur Host1, Host 2, Host 3, aber das separat. Ich möchte Zeiger auf alle 3 zur gleichen Zeit.So erhalten Sie Zugriff auf die anderen ähnlichen Module in Omnet ++

Oder ein Zeiger auf das Netzwerk, das sie enthält.

Antwort

2

Sie können getModuleByPath(path) von jedem Modul verwenden, um im gesamten Simulationsnetzwerk nach einem Modul mit angegebenem Namen und Pfad zu suchen.
Ein Beispiel (unter der Annahme, dass es 10 Hosts):

for (int i = 0; i < 9; ++i) { 
    char buf[20]; 
    sprintf(buf, "host%d", i); 
    cModule * mod = getModuleByPath(buf); 
    if (mod != nullptr) { 
     // ... 
     // now mod contains the pointer to another host's module 
    } else { 
     EV << "No module " << buf << endl; 
    } 
} 

EDIT
Unter der Annahme, dass jeder AdHoc Host ein Submodul manetrouting eine allgemeinere Lösung verwendet werden kann, genannt hat:

cModule *network = cSimulation::getActiveSimulation()->getSystemModule(); 
for (SubmoduleIterator it(network); !it.end(); ++it) { 
    cModule * mod = *it; 
    if (mod->getSubmodule("manetrouting") != nullptr) { 
     // check whether it is the same host 
     if (this != mod && getParentModule() != mod) { 
      EV << "Host " << mod->getName() << " is anther AdHoc host (not itself)" << endl; 
     } 
    } 
} 

Ein Es wurde eine zusätzliche Bedingung hinzugefügt, um den Host mit diesem Code in den Ergebnissen auszulassen.

+0

Also muss es hart codiert werden, nicht wahr? So wie man die Namen anderer Module im Netzwerk kennen sollte. Gibt es trotzdem eine Liste mit anderen Modulen oder ist das das Beste, was wir tun können? Danke für Ihre Antwort. – indraneelb1903

+0

Man sollte präzisieren, welches Element AdHoc-Host von anderen Modulen im Netzwerk unterscheidet. Es könnte ein Name oder ein internes Modul oder eine zusätzliche Anmerkung sein, die * nicht innerhalb eines Moduls eines anderen Typs * vorhanden ist. Ich habe meine Antwort erweitert, unter der Annahme, dass jeder AdHoc-Host ein Submodul "Manetrouting" hat. Wenn dies in Ihrem Modell nicht der Fall ist, geben Sie eine Definition Ihres Adhoc-Hosts an. –

+0

Vielen Dank. – indraneelb1903

Verwandte Themen