INET Framework for OMNeT++/OMNEST
inet::StreamThroughReceiver Class Reference

#include <StreamThroughReceiver.h>

Inheritance diagram for inet::StreamThroughReceiver:
inet::StreamingReceiverBase inet::PacketReceiverBase inet::OperationalMixin< PacketProcessorBase > inet::queueing::IActivePacketSource inet::queueing::PacketProcessorBase inet::ILifecycle inet::queueing::IPacketProcessor inet::StringFormat::IDirectiveResolver

Public Member Functions

virtual bool supportsPacketStreaming (cGate *gate) const override
 Returns true if the processor supports streaming packets at the given gate. More...
 
- Public Member Functions inherited from inet::StreamingReceiverBase
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 
- Public Member Functions inherited from inet::PacketReceiverBase
virtual ~PacketReceiverBase ()
 
virtual IPassivePacketSinkgetConsumer (cGate *gate) override
 Returns the passive packet sink where packets are pushed or nullptr if the connected module doesn't implement the interface. More...
 
virtual bool supportsPacketPushing (cGate *gate) const override
 Returns true if the processor supports pushing packets at the given gate. More...
 
virtual bool supportsPacketPulling (cGate *gate) const override
 Returns true if the processor supports pulling packets at the given gate. More...
 
virtual void handleCanPushPacketChanged (cGate *gate) override
 Notifies about a change in the possibility of pushing some packet into the passive packet sink at the given gate. More...
 
virtual void handlePushPacketProcessed (Packet *packet, cGate *gate, bool successful) override
 Notifies about the completion of the packet processing for a packet that was pushed earlier independently whether the packet is passed or streamed. More...
 
- Public Member Functions inherited from inet::OperationalMixin< PacketProcessorBase >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::queueing::PacketProcessorBase
virtual bool supportsPacketSending (cGate *gate) const override
 Returns true if the processor supports sending packets at the given gate. More...
 
virtual bool supportsPacketPassing (cGate *gate) const override
 Returns true if the processor supports passing packets as a whole at the given gate. More...
 
virtual const char * resolveDirective (char directive) const override
 
- Public Member Functions inherited from inet::queueing::IPacketProcessor
virtual ~IPacketProcessor ()
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 
- Public Member Functions inherited from inet::queueing::IActivePacketSource
virtual ~IActivePacketSource ()
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void handleMessageWhenUp (cMessage *message) override
 
virtual void receivePacketStart (cPacket *packet, cGate *gate, bps datarate)
 
virtual void receivePacketProgress (cPacket *packet, cGate *gate, bps datarate, b position, simtime_t timePosition, b extraProcessableLength, simtime_t extraProcessableDuration)
 
virtual void receivePacketEnd (cPacket *packet, cGate *gate, bps datarate)
 
- Protected Member Functions inherited from inet::PacketReceiverBase
virtual bool isInitializeStage (int stage) const override
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
virtual void handleMessageWhenDown (cMessage *message) override
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
virtual PacketdecodePacket (Signal *signal) const
 
- Protected Member Functions inherited from inet::OperationalMixin< PacketProcessorBase >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual bool handleOperationStage (LifecycleOperation *operation, IDoneCallback *doneCallback) override
 Perform one stage of a lifecycle operation. More...
 
virtual State getInitialOperationalState () const
 Returns initial operational state: OPERATING or NOT_OPERATING. More...
 
virtual void handleActiveOperationTimeout (cMessage *message)
 
virtual bool isUp () const
 utility functions More...
 
virtual bool isDown () const
 
virtual void setOperationalState (State newState)
 
virtual void scheduleOperationTimeout (simtime_t timeout)
 
virtual void setupActiveOperation (LifecycleOperation *operation, IDoneCallback *doneCallback, State)
 
virtual void delayActiveOperationFinish (simtime_t timeout)
 
virtual void startActiveOperationExtraTime (simtime_t delay=SIMTIME_ZERO)
 
virtual void startActiveOperationExtraTimeOrFinish (simtime_t extraTime)
 
virtual void finishActiveOperation ()
 
- Protected Member Functions inherited from inet::queueing::PacketProcessorBase
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handlePacketProcessed (Packet *packet)
 
virtual void checkPacketOperationSupport (cGate *gate) const
 
virtual void checkPacketOperationSupport (cGate *startGate, cGate *endGate) const
 
virtual void animate (Packet *packet, cGate *gate, const SendOptions &sendOptions, Action action) const
 
virtual void animatePacket (Packet *packet, cGate *gate, Action action) const
 
virtual void animatePacketStart (Packet *packet, cGate *gate, bps datarate, long transmissionId, Action action) const
 
virtual void animatePacketStart (Packet *packet, cGate *gate, bps datarate, const SendOptions &sendOptions, Action action) const
 
virtual void animatePacketEnd (Packet *packet, cGate *gate, long transmissionId, Action action) const
 
virtual void animatePacketEnd (Packet *packet, cGate *gate, const SendOptions &sendOptions, Action action) const
 
virtual void animatePacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, long transmissionId, Action action) const
 
virtual void animatePacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, const SendOptions &sendOptions, Action action) const
 
virtual void pushOrSendPacket (Packet *packet, cGate *gate, IPassivePacketSink *consumer)
 
virtual void pushOrSendPacketStart (Packet *packet, cGate *gate, IPassivePacketSink *consumer, bps datarate, int transmissionId)
 
virtual void pushOrSendPacketEnd (Packet *packet, cGate *gate, IPassivePacketSink *consumer, int transmissionId)
 
virtual void pushOrSendPacketProgress (Packet *packet, cGate *gate, IPassivePacketSink *consumer, bps datarate, b position, b extraProcessableLength, int transmissionId)
 
virtual void animatePush (Packet *packet, cGate *gate, const SendOptions &sendOptions) const
 
virtual void animatePushPacket (Packet *packet, cGate *gate) const
 
virtual void animatePushPacketStart (Packet *packet, cGate *gate, bps datarate, long transmissionId) const
 
virtual void animatePushPacketStart (Packet *packet, cGate *gate, bps datarate, const SendOptions &sendOptions) const
 
virtual void animatePushPacketEnd (Packet *packet, cGate *gate, long transmissionId) const
 
virtual void animatePushPacketEnd (Packet *packet, cGate *gate, const SendOptions &sendOptions) const
 
virtual void animatePushPacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, long transmissionId) const
 
virtual void animatePushPacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, const SendOptions &sendOptions) const
 
virtual void animatePull (Packet *packet, cGate *gate, const SendOptions &sendOptions) const
 
virtual void animatePullPacket (Packet *packet, cGate *gate) const
 
virtual void animatePullPacketStart (Packet *packet, cGate *gate, bps datarate, long transmissionId) const
 
virtual void animatePullPacketStart (Packet *packet, cGate *gate, bps datarate, const SendOptions &sendOptions) const
 
virtual void animatePullPacketEnd (Packet *packet, cGate *gate, long transmissionId) const
 
virtual void animatePullPacketEnd (Packet *packet, cGate *gate, const SendOptions &sendOptions) const
 
virtual void animatePullPacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, long transmissionId) const
 
virtual void animatePullPacketProgress (Packet *packet, cGate *gate, bps datarate, b position, b extraProcessableLength, const SendOptions &sendOptions) const
 
virtual void dropPacket (Packet *packet, PacketDropReason reason, int limit=-1)
 
virtual void updateDisplayString () const
 

Additional Inherited Members

- Protected Types inherited from inet::OperationalMixin< PacketProcessorBase >
enum  State
 
- Protected Types inherited from inet::queueing::PacketProcessorBase
enum  Action { PUSH, PULL }
 
- Protected Attributes inherited from inet::StreamingReceiverBase
cChannel * transmissionChannel = nullptr
 
- Protected Attributes inherited from inet::PacketReceiverBase
const NetworkInterfacenetworkInterface = nullptr
 
bps rxDatarate = bps(NaN)
 
cGate * inputGate = nullptr
 
cGate * outputGate = nullptr
 
IPassivePacketSinkconsumer = nullptr
 
SignalrxSignal = nullptr
 
- Protected Attributes inherited from inet::OperationalMixin< PacketProcessorBase >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 
- Protected Attributes inherited from inet::queueing::PacketProcessorBase
const char * displayStringTextFormat = nullptr
 
int numProcessedPackets = -1
 
b processedTotalLength = b(-1)
 

Member Function Documentation

◆ handleMessageWhenUp()

void inet::StreamThroughReceiver::handleMessageWhenUp ( cMessage *  message)
overrideprotectedvirtual

Reimplemented from inet::PacketReceiverBase.

24 {
25  if (message->getArrivalGate() == inputGate) {
26  auto signal = check_and_cast<Signal *>(message);
27  if (!signal->isUpdate())
29  else if (signal->getRemainingDuration() == 0)
31  else {
32  auto packet = check_and_cast<Packet *>(signal->getEncapsulatedPacket());
33  simtime_t timePosition = signal->getDuration() - signal->getRemainingDuration();
34  b position(std::floor(packet->getTotalLength().get() * timePosition.dbl() / signal->getDuration().dbl()));
35  receivePacketProgress(signal, inputGate, rxDatarate, position, timePosition, b(0), 0);
36  }
37  }
38  else
41 }

◆ initialize()

void inet::StreamThroughReceiver::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::StreamingReceiverBase.

15 {
17  if (stage == INITSTAGE_LOCAL) {
18  setTxUpdateSupport(true);
19  inputGate->setDeliverImmediately(true);
20  }
21 }

◆ receivePacketEnd()

void inet::StreamThroughReceiver::receivePacketEnd ( cPacket *  packet,
cGate *  gate,
bps  datarate 
)
protectedvirtual
71 {
72  take(cpacket);
73  auto signal = check_and_cast<Signal *>(cpacket);
74  EV_INFO << "Receiving signal start from channel" << EV_FIELD(signal) << EV_ENDL;
75  emit(receptionEndedSignal, signal);
76  if (rxSignal) {
77  delete rxSignal;
78  rxSignal = signal;
79  auto packet = decodePacket(rxSignal);
80  handlePacketProcessed(packet);
81  pushOrSendPacketEnd(packet, outputGate, consumer, rxSignal->getTransmissionId());
82  delete rxSignal;
83  rxSignal = nullptr;
84  }
85  else {
86  EV_WARN << "Dropping signal end because signal start was not received" << EV_FIELD(signal) << EV_ENDL;
87  delete signal;
88  }
89 }

Referenced by handleMessageWhenUp().

◆ receivePacketProgress()

void inet::StreamThroughReceiver::receivePacketProgress ( cPacket *  packet,
cGate *  gate,
bps  datarate,
b  position,
simtime_t  timePosition,
b  extraProcessableLength,
simtime_t  extraProcessableDuration 
)
protectedvirtual
56 {
57  take(cpacket);
58  auto signal = check_and_cast<Signal *>(cpacket);
59  EV_INFO << "Receiving signal start from channel" << EV_FIELD(signal) << EV_ENDL;
60  if (rxSignal) {
61  delete rxSignal;
62  rxSignal = signal;
63  }
64  else {
65  EV_WARN << "Dropping signal progress because signal start was not received" << EV_FIELD(signal) << EV_ENDL;
66  delete signal;
67  }
68 }

Referenced by handleMessageWhenUp().

◆ receivePacketStart()

void inet::StreamThroughReceiver::receivePacketStart ( cPacket *  packet,
cGate *  gate,
bps  datarate 
)
protectedvirtual
44 {
45  ASSERT(rxSignal == nullptr);
46  take(cpacket);
47  auto signal = check_and_cast<Signal *>(cpacket);
48  EV_INFO << "Receiving signal start from channel" << EV_FIELD(signal) << EV_ENDL;
49  rxSignal = signal;
51  auto packet = decodePacket(rxSignal);
52  pushOrSendPacketStart(packet, outputGate, consumer, datarate, rxSignal->getTransmissionId());
53 }

Referenced by handleMessageWhenUp().

◆ supportsPacketStreaming()

virtual bool inet::StreamThroughReceiver::supportsPacketStreaming ( cGate *  gate) const
inlineoverridevirtual

Returns true if the processor supports streaming packets at the given gate.

A streamed packet is handed over from one module to another using several method calls and potentially exending to a non-zero simulation duration.

For example, packets are streamed to a preemptable signal transmitter module.

Connecting incompatible gates raises an error during initialize. The gate parameter must be a valid gate of this module. The gate should be marked with @labels(stream) in the NED file.

Reimplemented from inet::queueing::PacketProcessorBase.

26 { return true; }

The documentation for this class was generated from the following files:
inet::StreamThroughReceiver::receivePacketProgress
virtual void receivePacketProgress(cPacket *packet, cGate *gate, bps datarate, b position, simtime_t timePosition, b extraProcessableLength, simtime_t extraProcessableDuration)
Definition: StreamThroughReceiver.cc:55
inet::StreamThroughReceiver::receivePacketStart
virtual void receivePacketStart(cPacket *packet, cGate *gate, bps datarate)
Definition: StreamThroughReceiver.cc:43
inet::PacketReceiverBase::inputGate
cGate * inputGate
Definition: PacketReceiverBase.h:30
inet::receptionStartedSignal
simsignal_t receptionStartedSignal
Definition: Simsignals.cc:118
inet::PacketReceiverBase::rxSignal
Signal * rxSignal
Definition: PacketReceiverBase.h:34
inet::queueing::PacketProcessorBase::handlePacketProcessed
virtual void handlePacketProcessed(Packet *packet)
Definition: PacketProcessorBase.cc:34
inet::PacketReceiverBase::rxDatarate
bps rxDatarate
Definition: PacketReceiverBase.h:28
inet::receptionEndedSignal
simsignal_t receptionEndedSignal
Definition: Simsignals.cc:119
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::StreamThroughReceiver::receivePacketEnd
virtual void receivePacketEnd(cPacket *packet, cGate *gate, bps datarate)
Definition: StreamThroughReceiver.cc:70
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::OperationalMixin< PacketProcessorBase >::handleMessage
virtual void handleMessage(cMessage *msg) override
Definition: OperationalMixinImpl.h:45
inet::queueing::PacketProcessorBase::pushOrSendPacketEnd
virtual void pushOrSendPacketEnd(Packet *packet, cGate *gate, IPassivePacketSink *consumer, int transmissionId)
Definition: PacketProcessorBase.cc:154
inet::units::values::b
value< int64_t, units::b > b
Definition: Units.h:1241
inet::queueing::PacketProcessorBase::updateDisplayString
virtual void updateDisplayString() const
Definition: PacketProcessorBase.cc:399
inet::StreamingReceiverBase::initialize
virtual void initialize(int stage) override
Definition: StreamingReceiverBase.cc:12
inet::queueing::PacketProcessorBase::pushOrSendPacketStart
virtual void pushOrSendPacketStart(Packet *packet, cGate *gate, IPassivePacketSink *consumer, bps datarate, int transmissionId)
Definition: PacketProcessorBase.cc:136
inet::PacketReceiverBase::decodePacket
virtual Packet * decodePacket(Signal *signal) const
Definition: PacketReceiverBase.cc:68
inet::PacketReceiverBase::outputGate
cGate * outputGate
Definition: PacketReceiverBase.h:31
EV_ENDL
#define EV_ENDL
Definition: INETDefs.h:114
inet::PacketReceiverBase::consumer
IPassivePacketSink * consumer
Definition: PacketReceiverBase.h:32