INET Framework for OMNeT++/OMNEST
inet::visualizer::LinkBreakVisualizerBase Class Referenceabstract

#include <LinkBreakVisualizerBase.h>

Inheritance diagram for inet::visualizer::LinkBreakVisualizerBase:
inet::visualizer::VisualizerBase inet::visualizer::LinkBreakCanvasVisualizer inet::visualizer::LinkBreakOsgVisualizer

Classes

class  LinkBreakVisualization
 

Parameters

bool displayLinkBreaks = false
 
NetworkNodeFilter nodeFilter
 
InterfaceFilter interfaceFilter
 
PacketFilter packetFilter
 
const char * icon = nullptr
 
double iconTintAmount = NaN
 
cFigure::Color iconTintColor
 
const char * fadeOutMode = nullptr
 
double fadeOutTime = NaN
 
double fadeOutAnimationSpeed = NaN
 
std::map< std::pair< int, int >, const LinkBreakVisualization * > linkBreakVisualizations
 
virtual void initialize (int stage) override
 
virtual void handleParameterChange (const char *name) override
 
virtual void refreshDisplay () const override
 
virtual void preDelete (cComponent *root) override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual const LinkBreakVisualizationcreateLinkBreakVisualization (cModule *transmitter, cModule *receiver) const =0
 
virtual void addLinkBreakVisualization (const LinkBreakVisualization *linkBreakVisualization)
 
virtual void removeLinkBreakVisualization (const LinkBreakVisualization *linkBreakVisualization)
 
virtual void removeAllLinkBreakVisualizations ()
 
virtual void setAlpha (const LinkBreakVisualization *linkBreakVisualization, double alpha) const =0
 
virtual cModule * findNode (MacAddress address)
 
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 

Additional Inherited Members

- Protected Member Functions inherited from inet::visualizer::VisualizerBase
virtual int numInitStages () const override
 
virtual Coord getPosition (const cModule *networkNode) const
 
virtual Coord getContactPosition (const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
 
virtual Quaternion getOrientation (const cModule *networkNode) const
 
virtual void mapChunks (const Ptr< const Chunk > &chunk, const std::function< void(const Ptr< const Chunk > &, int)> &thunk) const
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Member Function Documentation

◆ addLinkBreakVisualization()

void inet::visualizer::LinkBreakVisualizerBase::addLinkBreakVisualization ( const LinkBreakVisualization linkBreakVisualization)
protectedvirtual

Reimplemented in inet::visualizer::LinkBreakCanvasVisualizer, and inet::visualizer::LinkBreakOsgVisualizer.

148 {
149  auto key = std::pair<int, int>(linkBreakVisualization->transmitterModuleId, linkBreakVisualization->receiverModuleId);
150  linkBreakVisualizations[key] = linkBreakVisualization;
151 }

Referenced by inet::visualizer::LinkBreakOsgVisualizer::addLinkBreakVisualization(), inet::visualizer::LinkBreakCanvasVisualizer::addLinkBreakVisualization(), and receiveSignal().

◆ createLinkBreakVisualization()

virtual const LinkBreakVisualization* inet::visualizer::LinkBreakVisualizerBase::createLinkBreakVisualization ( cModule *  transmitter,
cModule *  receiver 
) const
protectedpure virtual

◆ findNode()

cModule * inet::visualizer::LinkBreakVisualizerBase::findNode ( MacAddress  address)
protectedvirtual
162 {
163  L3AddressResolver addressResolver;
164  for (cModule::SubmoduleIterator it(visualizationSubjectModule); !it.end(); it++) {
165  auto networkNode = *it;
166  if (isNetworkNode(networkNode)) {
167  auto interfaceTable = addressResolver.findInterfaceTableOf(networkNode);
168  for (int i = 0; i < interfaceTable->getNumInterfaces(); i++)
169  if (interfaceTable->getInterface(i)->getMacAddress() == address)
170  return networkNode;
171  }
172  }
173  return nullptr;
174 }

Referenced by receiveSignal().

◆ handleParameterChange()

void inet::visualizer::LinkBreakVisualizerBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual
60 {
61  if (!hasGUI()) return;
62  if (name != nullptr) {
63  if (!strcmp(name, "nodeFilter"))
64  nodeFilter.setPattern(par("nodeFilter"));
65  else if (!strcmp(name, "interfaceFilter"))
66  interfaceFilter.setPattern(par("interfaceFilter"));
67  else if (!strcmp(name, "packetFilter"))
68  packetFilter.setExpression(par("packetFilter").objectValue());
70  }
71 }

◆ initialize()

void inet::visualizer::LinkBreakVisualizerBase::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::visualizer::VisualizerBase.

Reimplemented in inet::visualizer::LinkBreakCanvasVisualizer.

39 {
41  if (!hasGUI()) return;
42  if (stage == INITSTAGE_LOCAL) {
43  displayLinkBreaks = par("displayLinkBreaks");
44  nodeFilter.setPattern(par("nodeFilter"));
45  interfaceFilter.setPattern(par("interfaceFilter"));
46  packetFilter.setExpression(par("packetFilter").objectValue());
47  icon = par("icon");
48  iconTintAmount = par("iconTintAmount");
49  if (iconTintAmount != 0)
50  iconTintColor = cFigure::Color(par("iconTintColor"));
51  fadeOutMode = par("fadeOutMode");
52  fadeOutTime = par("fadeOutTime");
53  fadeOutAnimationSpeed = par("fadeOutAnimationSpeed");
55  subscribe();
56  }
57 }

Referenced by inet::visualizer::LinkBreakCanvasVisualizer::initialize().

◆ preDelete()

void inet::visualizer::LinkBreakVisualizerBase::preDelete ( cComponent *  root)
overrideprotectedvirtual
31 {
32  if (displayLinkBreaks) {
33  unsubscribe();
35  }
36 }

◆ receiveSignal()

void inet::visualizer::LinkBreakVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  object,
cObject *  details 
)
overridevirtual
113 {
114  Enter_Method("%s", cComponent::getSignalName(signal));
115 
116  if (signal == linkBrokenSignal) {
117  MacAddress transmitterAddress;
118  MacAddress receiverAddress;
119  // TODO revive
120 // if (auto frame = dynamic_cast<IMACFrame *>(object)) {
121 // transmitterAddress = frame->getTransmitterAddress();
122 // receiverAddress = frame->getReceiverAddress();
123 // }
124 #ifdef INET_WITH_IEEE80211
125  if (auto frame = dynamic_cast<ieee80211::Ieee80211TwoAddressHeader *>(object)) {
126  transmitterAddress = frame->getTransmitterAddress();
127  receiverAddress = frame->getReceiverAddress();
128  }
129 #endif // INET_WITH_IEEE80211
130  auto transmitter = findNode(transmitterAddress);
131  auto receiver = findNode(receiverAddress);
132  if (nodeFilter.matches(transmitter) && nodeFilter.matches(receiver)) {
133  auto key = std::pair<int, int>(transmitter->getId(), receiver->getId());
134  auto it = linkBreakVisualizations.find(key);
135  if (it == linkBreakVisualizations.end())
137  else {
138  auto linkBreakVisualization = it->second;
139  linkBreakVisualization->linkBreakAnimationPosition = AnimationPosition();
140  }
141  }
142  }
143  else
144  throw cRuntimeError("Unknown signal");
145 }

◆ refreshDisplay()

void inet::visualizer::LinkBreakVisualizerBase::refreshDisplay ( ) const
overrideprotectedvirtual

Reimplemented in inet::visualizer::LinkBreakCanvasVisualizer, and inet::visualizer::LinkBreakOsgVisualizer.

74 {
75  AnimationPosition currentAnimationPosition;
76  std::vector<const LinkBreakVisualization *> removedLinkBreakVisualizations;
77  for (auto it : linkBreakVisualizations) {
78  auto linkBreakVisualization = it.second;
79  double delta;
80  if (!strcmp(fadeOutMode, "simulationTime"))
81  delta = (currentAnimationPosition.getSimulationTime() - linkBreakVisualization->linkBreakAnimationPosition.getSimulationTime()).dbl();
82  else if (!strcmp(fadeOutMode, "animationTime"))
83  delta = currentAnimationPosition.getAnimationTime() - linkBreakVisualization->linkBreakAnimationPosition.getAnimationTime();
84  else if (!strcmp(fadeOutMode, "realTime"))
85  delta = currentAnimationPosition.getRealTime() - linkBreakVisualization->linkBreakAnimationPosition.getRealTime();
86  else
87  throw cRuntimeError("Unknown fadeOutMode: %s", fadeOutMode);
88  if (delta > fadeOutTime)
89  removedLinkBreakVisualizations.push_back(linkBreakVisualization);
90  else
91  setAlpha(linkBreakVisualization, 1 - delta / fadeOutTime);
92  }
93  for (auto linkBreakVisualization : removedLinkBreakVisualizations) {
94  const_cast<LinkBreakVisualizerBase *>(this)->removeLinkBreakVisualization(linkBreakVisualization);
95  delete linkBreakVisualization;
96  }
97 }

Referenced by inet::visualizer::LinkBreakOsgVisualizer::refreshDisplay(), and inet::visualizer::LinkBreakCanvasVisualizer::refreshDisplay().

◆ removeAllLinkBreakVisualizations()

void inet::visualizer::LinkBreakVisualizerBase::removeAllLinkBreakVisualizations ( )
protectedvirtual
177 {
178  std::vector<const LinkBreakVisualization *> removedLinkBreakVisualizations;
179  for (auto it : linkBreakVisualizations)
180  removedLinkBreakVisualizations.push_back(it.second);
181  for (auto it : removedLinkBreakVisualizations) {
183  delete it;
184  }
185 }

Referenced by handleParameterChange(), and preDelete().

◆ removeLinkBreakVisualization()

void inet::visualizer::LinkBreakVisualizerBase::removeLinkBreakVisualization ( const LinkBreakVisualization linkBreakVisualization)
protectedvirtual

Reimplemented in inet::visualizer::LinkBreakCanvasVisualizer, and inet::visualizer::LinkBreakOsgVisualizer.

154 {
155  auto key = std::pair<int, int>(linkBreakVisualization->transmitterModuleId, linkBreakVisualization->receiverModuleId);
156  auto it = linkBreakVisualizations.find(key);
157  linkBreakVisualizations.erase(it);
158 }

Referenced by refreshDisplay(), removeAllLinkBreakVisualizations(), inet::visualizer::LinkBreakOsgVisualizer::removeLinkBreakVisualization(), and inet::visualizer::LinkBreakCanvasVisualizer::removeLinkBreakVisualization().

◆ setAlpha()

virtual void inet::visualizer::LinkBreakVisualizerBase::setAlpha ( const LinkBreakVisualization linkBreakVisualization,
double  alpha 
) const
protectedpure virtual

◆ subscribe()

void inet::visualizer::LinkBreakVisualizerBase::subscribe ( )
protectedvirtual
100 {
102 }

Referenced by initialize().

◆ unsubscribe()

void inet::visualizer::LinkBreakVisualizerBase::unsubscribe ( )
protectedvirtual
105 {
106  // NOTE: lookup the module again because it may have been deleted first
107  auto visualizationSubjectModule = findModuleFromPar<cModule>(par("visualizationSubjectModule"), this);
108  if (visualizationSubjectModule != nullptr)
109  visualizationSubjectModule->unsubscribe(linkBrokenSignal, this);
110 }

Referenced by preDelete().

Member Data Documentation

◆ displayLinkBreaks

bool inet::visualizer::LinkBreakVisualizerBase::displayLinkBreaks = false
protected

Referenced by initialize(), and preDelete().

◆ fadeOutAnimationSpeed

double inet::visualizer::LinkBreakVisualizerBase::fadeOutAnimationSpeed = NaN
protected

◆ fadeOutMode

const char* inet::visualizer::LinkBreakVisualizerBase::fadeOutMode = nullptr
protected

Referenced by initialize(), and refreshDisplay().

◆ fadeOutTime

double inet::visualizer::LinkBreakVisualizerBase::fadeOutTime = NaN
protected

Referenced by initialize(), and refreshDisplay().

◆ icon

◆ iconTintAmount

double inet::visualizer::LinkBreakVisualizerBase::iconTintAmount = NaN
protected

◆ iconTintColor

cFigure::Color inet::visualizer::LinkBreakVisualizerBase::iconTintColor
protected

◆ interfaceFilter

InterfaceFilter inet::visualizer::LinkBreakVisualizerBase::interfaceFilter
protected

◆ linkBreakVisualizations

◆ nodeFilter

NetworkNodeFilter inet::visualizer::LinkBreakVisualizerBase::nodeFilter
protected

◆ packetFilter

PacketFilter inet::visualizer::LinkBreakVisualizerBase::packetFilter
protected

The documentation for this class was generated from the following files:
inet::linkBrokenSignal
simsignal_t linkBrokenSignal
Definition: Simsignals.cc:22
inet::visualizer::NetworkNodeFilter::matches
bool matches(const cModule *module) const
Definition: NetworkNodeFilter.cc:19
inet::visualizer::NetworkNodeFilter::setPattern
void setPattern(const char *pattern)
Definition: NetworkNodeFilter.cc:14
inet::visualizer::InterfaceFilter::setPattern
void setPattern(const char *pattern)
Definition: InterfaceFilter.cc:14
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::isNetworkNode
bool isNetworkNode(const cModule *mod)
Returns true if the given module is a network node, i.e.
Definition: ModuleAccess.cc:18
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::DiffservUtil::Color
Color
Definition: DiffservUtil.h:17
inet::visualizer::VisualizerBase::visualizationSubjectModule
cModule * visualizationSubjectModule
Definition: VisualizerBase.h:26
inet::visualizer::VisualizerBase::initialize
virtual void initialize(int stage) override
Definition: VisualizerBase.cc:23