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

#include <LinkVisualizerBase.h>

Inheritance diagram for inet::visualizer::LinkVisualizerBase:
inet::visualizer::VisualizerBase inet::visualizer::LinkCanvasVisualizerBase inet::visualizer::LinkOsgVisualizerBase inet::visualizer::DataLinkCanvasVisualizer inet::visualizer::PhysicalLinkCanvasVisualizer inet::visualizer::DataLinkOsgVisualizer inet::visualizer::PhysicalLinkOsgVisualizer

Classes

class  DirectiveResolver
 
class  LinkVisualization
 

Protected Types

enum  ActivityLevel { ACTIVITY_LEVEL_SERVICE, ACTIVITY_LEVEL_PEER, ACTIVITY_LEVEL_PROTOCOL }
 

Parameters

bool displayLinks = false
 
ActivityLevel activityLevel = static_cast<ActivityLevel>(-1)
 
NetworkNodeFilter nodeFilter
 
InterfaceFilter interfaceFilter
 
PacketFilter packetFilter
 
cFigure::Color lineColor
 
cFigure::LineStyle lineStyle
 
double lineWidth = NaN
 
double lineShift = NaN
 
const char * lineShiftMode = nullptr
 
double lineContactSpacing = NaN
 
const char * lineContactMode = nullptr
 
StringFormat labelFormat
 
cFigure::Font labelFont
 
cFigure::Color labelColor
 
const char * fadeOutMode = nullptr
 
double fadeOutTime = NaN
 
double fadeOutAnimationSpeed = NaN
 
double holdAnimationTime = NaN
 
LineManagerlineManager = nullptr
 
std::map< int, int > lastModules
 Maps packet to last module. More...
 
std::map< std::pair< int, int >, const LinkVisualization * > linkVisualizations
 Maps source/destination module ids to link visualizations. More...
 
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 bool isLinkStart (cModule *module) const =0
 
virtual bool isLinkEnd (cModule *module) const =0
 
virtual const LinkVisualizationcreateLinkVisualization (cModule *source, cModule *destination, cPacket *packet) const =0
 
virtual const LinkVisualizationgetLinkVisualization (std::pair< int, int > linkVisualization)
 
virtual void addLinkVisualization (std::pair< int, int > sourceAndDestination, const LinkVisualization *linkVisualization)
 
virtual void removeLinkVisualization (const LinkVisualization *linkVisualization)
 
virtual void removeAllLinkVisualizations ()
 
virtual void setAlpha (const LinkVisualization *linkVisualization, double alpha) const =0
 
virtual cModule * getLastModule (int treeId)
 
virtual void setLastModule (int treeId, cModule *lastModule)
 
virtual void removeLastModule (int treeId)
 
virtual std::string getLinkVisualizationText (cPacket *packet) const
 
virtual void refreshLinkVisualization (const LinkVisualization *linkVisualization, cPacket *packet)
 
virtual void updateLinkVisualization (cModule *source, cModule *destination, cPacket *packet)
 
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 Enumeration Documentation

◆ ActivityLevel

Enumerator
ACTIVITY_LEVEL_SERVICE 
ACTIVITY_LEVEL_PEER 
ACTIVITY_LEVEL_PROTOCOL 

Member Function Documentation

◆ addLinkVisualization()

void inet::visualizer::LinkVisualizerBase::addLinkVisualization ( std::pair< int, int >  sourceAndDestination,
const LinkVisualization linkVisualization 
)
protectedvirtual

◆ createLinkVisualization()

virtual const LinkVisualization* inet::visualizer::LinkVisualizerBase::createLinkVisualization ( cModule *  source,
cModule *  destination,
cPacket *  packet 
) const
protectedpure virtual

◆ getLastModule()

cModule * inet::visualizer::LinkVisualizerBase::getLastModule ( int  treeId)
protectedvirtual
200 {
201  auto it = lastModules.find(treeId);
202  return (it == lastModules.end()) ? nullptr : getSimulation()->getModule(it->second);
203 }

◆ getLinkVisualization()

const LinkVisualizerBase::LinkVisualization * inet::visualizer::LinkVisualizerBase::getLinkVisualization ( std::pair< int, int >  linkVisualization)
protectedvirtual
170 {
171  auto it = linkVisualizations.find(linkVisualization);
172  return it == linkVisualizations.end() ? nullptr : it->second;
173 }

Referenced by updateLinkVisualization().

◆ getLinkVisualizationText()

std::string inet::visualizer::LinkVisualizerBase::getLinkVisualizationText ( cPacket *  packet) const
protectedvirtual
164 {
165  DirectiveResolver directiveResolver(packet);
166  return labelFormat.formatString(&directiveResolver);
167 }

Referenced by inet::visualizer::LinkCanvasVisualizerBase::createLinkVisualization(), and inet::visualizer::LinkCanvasVisualizerBase::refreshLinkVisualization().

◆ handleParameterChange()

void inet::visualizer::LinkVisualizerBase::handleParameterChange ( const char *  name)
overrideprotectedvirtual
86 {
87  if (!hasGUI()) return;
88  if (name != nullptr) {
89  if (!strcmp(name, "nodeFilter"))
90  nodeFilter.setPattern(par("nodeFilter"));
91  else if (!strcmp(name, "interfaceFilter"))
92  interfaceFilter.setPattern(par("interfaceFilter"));
93  else if (!strcmp(name, "packetFilter"))
94  packetFilter.setExpression(par("packetFilter").objectValue());
96  }
97 }

◆ initialize()

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

Reimplemented from inet::visualizer::VisualizerBase.

Reimplemented in inet::visualizer::LinkCanvasVisualizerBase, and inet::visualizer::LinkOsgVisualizerBase.

49 {
51  if (!hasGUI()) return;
52  if (stage == INITSTAGE_LOCAL) {
53  displayLinks = par("displayLinks");
54  const char *activityLevelString = par("activityLevel");
55  if (!strcmp(activityLevelString, "service"))
57  else if (!strcmp(activityLevelString, "peer"))
59  else if (!strcmp(activityLevelString, "protocol"))
61  else
62  throw cRuntimeError("Unknown activity level: %s", activityLevelString);
63  nodeFilter.setPattern(par("nodeFilter"));
64  interfaceFilter.setPattern(par("interfaceFilter"));
65  packetFilter.setExpression(par("packetFilter").objectValue());
66  lineColor = cFigure::Color(par("lineColor"));
67  lineStyle = cFigure::parseLineStyle(par("lineStyle"));
68  lineWidth = par("lineWidth");
69  lineShift = par("lineShift");
70  lineShiftMode = par("lineShiftMode");
71  lineContactSpacing = par("lineContactSpacing");
72  lineContactMode = par("lineContactMode");
73  labelFormat.parseFormat(par("labelFormat"));
74  labelFont = cFigure::parseFont(par("labelFont"));
75  labelColor = cFigure::Color(par("labelColor"));
76  fadeOutMode = par("fadeOutMode");
77  fadeOutTime = par("fadeOutTime");
78  fadeOutAnimationSpeed = par("fadeOutAnimationSpeed");
79  holdAnimationTime = par("holdAnimationTime");
80  if (displayLinks)
81  subscribe();
82  }
83 }

Referenced by inet::visualizer::LinkOsgVisualizerBase::initialize(), and inet::visualizer::LinkCanvasVisualizerBase::initialize().

◆ isLinkEnd()

virtual bool inet::visualizer::LinkVisualizerBase::isLinkEnd ( cModule *  module) const
protectedpure virtual

◆ isLinkStart()

virtual bool inet::visualizer::LinkVisualizerBase::isLinkStart ( cModule *  module) const
protectedpure virtual

◆ preDelete()

void inet::visualizer::LinkVisualizerBase::preDelete ( cComponent *  root)
overrideprotectedvirtual
41 {
42  if (displayLinks) {
43  unsubscribe();
45  }
46 }

◆ receiveSignal()

void inet::visualizer::LinkVisualizerBase::receiveSignal ( cComponent *  source,
simsignal_t  signal,
cObject *  object,
cObject *  details 
)
overridevirtual
233 {
234  Enter_Method("%s", cComponent::getSignalName(signal));
235 
239  {
240  if (isLinkStart(static_cast<cModule *>(source))) {
241  auto module = check_and_cast<cModule *>(source);
242  auto packet = check_and_cast<Packet *>(object);
243  mapChunks(packet->peekAt(b(0), packet->getTotalLength()), [&] (const Ptr<const Chunk>& chunk, int id) { if (getLastModule(id) != nullptr) removeLastModule(id); });
244  auto networkNode = getContainingNode(module);
245  auto networkInterface = getContainingNicModule(module);
246  if (nodeFilter.matches(networkNode) && interfaceFilter.matches(networkInterface) && packetFilter.matches(packet)) {
247  mapChunks(packet->peekAt(b(0), packet->getTotalLength()), [&] (const Ptr<const Chunk>& chunk, int id) { setLastModule(id, module); });
248  }
249  }
250  }
251  else if ((activityLevel == ACTIVITY_LEVEL_SERVICE && signal == packetSentToUpperSignal) ||
254  {
255  if (isLinkEnd(static_cast<cModule *>(source))) {
256  auto module = check_and_cast<cModule *>(source);
257  auto packet = check_and_cast<Packet *>(object);
258  auto networkNode = getContainingNode(module);
259  auto networkInterface = getContainingNicModule(module);
260  if (nodeFilter.matches(networkNode) && interfaceFilter.matches(networkInterface) && packetFilter.matches(packet)) {
261  mapChunks(packet->peekAt(b(0), packet->getTotalLength()), [&] (const Ptr<const Chunk>& chunk, int id) {
262  auto lastModule = getLastModule(id);
263  if (lastModule != nullptr)
264  updateLinkVisualization(getContainingNode(lastModule), networkNode, packet);
265  // NOTE: don't call removeLastModule(treeId) because other network nodes may still receive this packet
266  });
267  }
268  }
269  }
270  else
271  throw cRuntimeError("Unknown signal");
272 }

◆ refreshDisplay()

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

Reimplemented in inet::visualizer::LinkCanvasVisualizerBase, and inet::visualizer::LinkOsgVisualizerBase.

100 {
101  if (displayLinks) {
102  AnimationPosition currentAnimationPosition;
103  std::vector<const LinkVisualization *> removedLinkVisualizations;
104  for (auto it : linkVisualizations) {
105  auto linkVisualization = it.second;
106  double delta;
107  if (!strcmp(fadeOutMode, "simulationTime"))
108  delta = (currentAnimationPosition.getSimulationTime() - linkVisualization->lastUsageAnimationPosition.getSimulationTime()).dbl();
109  else if (!strcmp(fadeOutMode, "animationTime"))
110  delta = currentAnimationPosition.getAnimationTime() - linkVisualization->lastUsageAnimationPosition.getAnimationTime();
111  else if (!strcmp(fadeOutMode, "realTime"))
112  delta = currentAnimationPosition.getRealTime() - linkVisualization->lastUsageAnimationPosition.getRealTime();
113  else
114  throw cRuntimeError("Unknown fadeOutMode: %s", fadeOutMode);
115  if (delta > fadeOutTime)
116  removedLinkVisualizations.push_back(linkVisualization);
117  else
118  setAlpha(linkVisualization, 1 - delta / fadeOutTime);
119  }
120  for (auto linkVisualization : removedLinkVisualizations) {
121  const_cast<LinkVisualizerBase *>(this)->removeLinkVisualization(linkVisualization);
122  delete linkVisualization;
123  }
124  }
125 }

Referenced by inet::visualizer::LinkOsgVisualizerBase::refreshDisplay(), and inet::visualizer::LinkCanvasVisualizerBase::refreshDisplay().

◆ refreshLinkVisualization()

void inet::visualizer::LinkVisualizerBase::refreshLinkVisualization ( const LinkVisualization linkVisualization,
cPacket *  packet 
)
protectedvirtual

Reimplemented in inet::visualizer::LinkCanvasVisualizerBase.

216 {
217  linkVisualization->lastUsageAnimationPosition = AnimationPosition();
218 }

Referenced by inet::visualizer::LinkCanvasVisualizerBase::refreshLinkVisualization(), and updateLinkVisualization().

◆ removeAllLinkVisualizations()

void inet::visualizer::LinkVisualizerBase::removeAllLinkVisualizations ( )
protectedvirtual
188 {
189  lastModules.clear();
190  std::vector<const LinkVisualization *> removedLinkVisualizations;
191  for (auto it : linkVisualizations)
192  removedLinkVisualizations.push_back(it.second);
193  for (auto it : removedLinkVisualizations) {
195  delete it;
196  }
197 }

Referenced by handleParameterChange(), and preDelete().

◆ removeLastModule()

void inet::visualizer::LinkVisualizerBase::removeLastModule ( int  treeId)
protectedvirtual
211 {
212  lastModules.erase(lastModules.find(treeId));
213 }

◆ removeLinkVisualization()

void inet::visualizer::LinkVisualizerBase::removeLinkVisualization ( const LinkVisualization linkVisualization)
protectedvirtual

◆ setAlpha()

virtual void inet::visualizer::LinkVisualizerBase::setAlpha ( const LinkVisualization linkVisualization,
double  alpha 
) const
protectedpure virtual

◆ setLastModule()

void inet::visualizer::LinkVisualizerBase::setLastModule ( int  treeId,
cModule *  lastModule 
)
protectedvirtual
206 {
207  lastModules[treeId] = module->getId();
208 }

◆ subscribe()

void inet::visualizer::LinkVisualizerBase::subscribe ( )
protectedvirtual

◆ unsubscribe()

void inet::visualizer::LinkVisualizerBase::unsubscribe ( )
protectedvirtual
144 {
145  // NOTE: lookup the module again because it may have been deleted first
146  auto visualizationSubjectModule = findModuleFromPar<cModule>(par("visualizationSubjectModule"), this);
147  if (visualizationSubjectModule != nullptr) {
151  }
152  else if (activityLevel == ACTIVITY_LEVEL_PEER) {
155  }
159  }
160  }
161 }

Referenced by preDelete().

◆ updateLinkVisualization()

void inet::visualizer::LinkVisualizerBase::updateLinkVisualization ( cModule *  source,
cModule *  destination,
cPacket *  packet 
)
protectedvirtual
221 {
222  auto key = std::pair<int, int>(source->getId(), destination->getId());
223  auto linkVisualization = getLinkVisualization(key);
224  if (linkVisualization == nullptr) {
225  linkVisualization = createLinkVisualization(source, destination, packet);
226  addLinkVisualization(key, linkVisualization);
227  }
228  else
229  refreshLinkVisualization(linkVisualization, packet);
230 }

Member Data Documentation

◆ activityLevel

ActivityLevel inet::visualizer::LinkVisualizerBase::activityLevel = static_cast<ActivityLevel>(-1)
protected

◆ displayLinks

bool inet::visualizer::LinkVisualizerBase::displayLinks = false
protected

◆ fadeOutAnimationSpeed

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

◆ fadeOutMode

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

Referenced by initialize(), and refreshDisplay().

◆ fadeOutTime

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

Referenced by initialize(), and refreshDisplay().

◆ holdAnimationTime

double inet::visualizer::LinkVisualizerBase::holdAnimationTime = NaN
protected

Referenced by addLinkVisualization(), and initialize().

◆ interfaceFilter

InterfaceFilter inet::visualizer::LinkVisualizerBase::interfaceFilter
protected

◆ labelColor

cFigure::Color inet::visualizer::LinkVisualizerBase::labelColor
protected

◆ labelFont

cFigure::Font inet::visualizer::LinkVisualizerBase::labelFont
protected

◆ labelFormat

StringFormat inet::visualizer::LinkVisualizerBase::labelFormat
protected

◆ lastModules

std::map<int, int> inet::visualizer::LinkVisualizerBase::lastModules
protected

Maps packet to last module.

Referenced by getLastModule(), removeAllLinkVisualizations(), removeLastModule(), and setLastModule().

◆ lineColor

cFigure::Color inet::visualizer::LinkVisualizerBase::lineColor
protected

◆ lineContactMode

const char* inet::visualizer::LinkVisualizerBase::lineContactMode = nullptr
protected

◆ lineContactSpacing

double inet::visualizer::LinkVisualizerBase::lineContactSpacing = NaN
protected

◆ lineManager

◆ lineShift

double inet::visualizer::LinkVisualizerBase::lineShift = NaN
protected

◆ lineShiftMode

const char* inet::visualizer::LinkVisualizerBase::lineShiftMode = nullptr
protected

◆ lineStyle

cFigure::LineStyle inet::visualizer::LinkVisualizerBase::lineStyle
protected

◆ lineWidth

◆ linkVisualizations

std::map<std::pair<int, int>, const LinkVisualization *> inet::visualizer::LinkVisualizerBase::linkVisualizations
protected

◆ nodeFilter

NetworkNodeFilter inet::visualizer::LinkVisualizerBase::nodeFilter
protected

◆ packetFilter

PacketFilter inet::visualizer::LinkVisualizerBase::packetFilter
protected

The documentation for this class was generated from the following files:
inet::StringFormat::parseFormat
void parseFormat(const char *format)
Definition: StringFormat.cc:12
inet::packetReceivedFromPeerSignal
simsignal_t packetReceivedFromPeerSignal
Definition: Simsignals.cc:94
inet::visualizer::InterfaceFilter::matches
bool matches(const NetworkInterface *networkInterface) const
Definition: InterfaceFilter.cc:19
inet::packetSentToPeerSignal
simsignal_t packetSentToPeerSignal
Definition: Simsignals.cc:93
inet::packetReceivedFromUpperSignal
simsignal_t packetReceivedFromUpperSignal
Definition: Simsignals.cc:88
inet::getContainingNode
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:40
inet::visualizer::NetworkNodeFilter::matches
bool matches(const cModule *module) const
Definition: NetworkNodeFilter.cc:19
inet::getContainingNicModule
NetworkInterface * getContainingNicModule(const cModule *from)
Find the nic module (inside the networkNode) containing the given module.
Definition: NetworkInterface.cc:691
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
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::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::packetReceivedFromLowerSignal
simsignal_t packetReceivedFromLowerSignal
Definition: Simsignals.cc:91
inet::StringFormat::formatString
const char * formatString(IDirectiveResolver *resolver) const
Definition: StringFormat.cc:17
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::packetSentToUpperSignal
simsignal_t packetSentToUpperSignal
Definition: Simsignals.cc:87
inet::visualizer::VisualizerBase::mapChunks
virtual void mapChunks(const Ptr< const Chunk > &chunk, const std::function< void(const Ptr< const Chunk > &, int)> &thunk) const
Definition: VisualizerBase.cc:90
inet::visualizer::VisualizerBase::initialize
virtual void initialize(int stage) override
Definition: VisualizerBase.cc:23
inet::packetSentToLowerSignal
simsignal_t packetSentToLowerSignal
Definition: Simsignals.cc:90