INET Framework for OMNeT++/OMNEST
inet::queueing::TokenBasedServer Class Reference

#include <TokenBasedServer.h>

Inheritance diagram for inet::queueing::TokenBasedServer:
inet::queueing::PacketServerBase inet::queueing::ITokenStorage inet::queueing::PacketProcessorBase inet::queueing::IActivePacketSink inet::queueing::IActivePacketSource inet::queueing::IPacketProcessor inet::StringFormat::IDirectiveResolver

Public Member Functions

virtual double getNumTokens () const override
 
virtual void addTokens (double tokens) override
 
virtual void removeTokens (double tokens) override
 
virtual void addTokenProductionRate (double tokenRate) override
 
virtual void removeTokenProductionRate (double tokenRate) override
 
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 handleCanPullPacketChanged (cGate *gate) override
 Notifies about a change in the possibility of pulling some packet from the passive packet source at the given gate. More...
 
virtual const char * resolveDirective (char directive) const override
 
- Public Member Functions inherited from inet::queueing::PacketServerBase
virtual IPassivePacketSourcegetProvider (cGate *gate) override
 Returns the passive packet source from where packets are pulled or nullptr if the connected module doesn't implement the interface. More...
 
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 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...
 
virtual void handlePullPacketProcessed (Packet *packet, cGate *gate, bool successful) override
 Notifies about the completion of the packet processing for a packet that was pulled earlier independently whether the packet is passed or streamed. 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 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::queueing::IPacketProcessor
virtual ~IPacketProcessor ()
 
- Public Member Functions inherited from inet::queueing::IActivePacketSink
virtual ~IActivePacketSink ()
 
- Public Member Functions inherited from inet::queueing::IActivePacketSource
virtual ~IActivePacketSource ()
 
- Public Member Functions inherited from inet::queueing::ITokenStorage
virtual ~ITokenStorage ()
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void processPackets ()
 
- 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
 

Protected Attributes

cPar * tokenConsumptionPerPacketParameter = nullptr
 
cPar * tokenConsumptionPerBitParameter = nullptr
 
double maxNumTokens = NaN
 
bool tokensDepletedSignaled = true
 
double numTokens = 0
 
- Protected Attributes inherited from inet::queueing::PacketServerBase
cGate * inputGate = nullptr
 
IPassivePacketSourceprovider = nullptr
 
cGate * outputGate = nullptr
 
IPassivePacketSinkconsumer = nullptr
 
- Protected Attributes inherited from inet::queueing::PacketProcessorBase
const char * displayStringTextFormat = nullptr
 
int numProcessedPackets = -1
 
b processedTotalLength = b(-1)
 

Additional Inherited Members

- Protected Types inherited from inet::queueing::PacketProcessorBase
enum  Action { PUSH, PULL }
 

Member Function Documentation

◆ addTokenProductionRate()

virtual void inet::queueing::TokenBasedServer::addTokenProductionRate ( double  tokenRate)
inlineoverridevirtual

Implements inet::queueing::ITokenStorage.

35 { throw cRuntimeError("TODO"); }

◆ addTokens()

void inet::queueing::TokenBasedServer::addTokens ( double  tokens)
overridevirtual

Implements inet::queueing::ITokenStorage.

80 {
81  Enter_Method("addTokens");
82  numTokens += tokens;
83  if (!std::isnan(maxNumTokens) && numTokens >= maxNumTokens)
86  tokensDepletedSignaled = false;
89 }

◆ getNumTokens()

virtual double inet::queueing::TokenBasedServer::getNumTokens ( ) const
inlineoverridevirtual

Implements inet::queueing::ITokenStorage.

32 { return numTokens; }

◆ handleCanPullPacketChanged()

void inet::queueing::TokenBasedServer::handleCanPullPacketChanged ( cGate *  gate)
overridevirtual

Notifies about a change in the possibility of pulling some packet from the passive packet source at the given gate.

This method is called, for example, when a new packet is inserted into a queue. It allows the sink to pull a new packet from the queue.

The gate parameter must be a valid gate of this module.

Implements inet::queueing::IActivePacketSink.

73 {
74  Enter_Method("handleCanPullPacketChanged");
77 }

◆ handleCanPushPacketChanged()

void inet::queueing::TokenBasedServer::handleCanPushPacketChanged ( cGate *  gate)
overridevirtual

Notifies about a change in the possibility of pushing some packet into the passive packet sink at the given gate.

This method is called, for example, when a new packet can be inserted into a queue. It allows the source to push a new packet into the queue.

The gate parameter must be a valid gate of this module.

Implements inet::queueing::IActivePacketSource.

68 {
69  Enter_Method("handleCanPushPacketChanged");
70 }

◆ initialize()

void inet::queueing::TokenBasedServer::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::queueing::PacketServerBase.

19 {
21  if (stage == INITSTAGE_LOCAL) {
22  tokenConsumptionPerPacketParameter = &par("tokenConsumptionPerPacket");
23  tokenConsumptionPerBitParameter = &par("tokenConsumptionPerBit");
24  displayStringTextFormat = par("displayStringTextFormat");
25  numTokens = par("initialNumTokens");
26  maxNumTokens = par("maxNumTokens");
27  WATCH(numTokens);
28  }
29  else if (stage == INITSTAGE_LAST)
31 }

◆ processPackets()

void inet::queueing::TokenBasedServer::processPackets ( )
protectedvirtual
34 {
35  while (true) {
36  auto packet = provider->canPullPacket(inputGate->getPathStartGate());
37  if (packet == nullptr)
38  break;
39  else {
40  auto tokenConsumptionPerPacket = tokenConsumptionPerPacketParameter->doubleValue();
41  auto tokenConsumptionPerBit = tokenConsumptionPerBitParameter->doubleValue();
42  int numRequiredTokens = tokenConsumptionPerPacket + tokenConsumptionPerBit * packet->getTotalLength().get();
43  if (numTokens >= numRequiredTokens) {
44  packet = provider->pullPacket(inputGate->getPathStartGate());
45  take(packet);
46  emit(packetPulledSignal, packet);
47  EV_INFO << "Processing packet" << EV_FIELD(packet) << EV_ENDL;
48  processedTotalLength += packet->getDataLength();
49  emit(packetPushedSignal, packet);
52  numTokens -= numRequiredTokens;
55  }
56  else {
60  }
61  break;
62  }
63  }
64  }
65 }

Referenced by addTokens(), and handleCanPullPacketChanged().

◆ removeTokenProductionRate()

virtual void inet::queueing::TokenBasedServer::removeTokenProductionRate ( double  tokenRate)
inlineoverridevirtual

Implements inet::queueing::ITokenStorage.

36 { throw cRuntimeError("TODO"); }

◆ removeTokens()

virtual void inet::queueing::TokenBasedServer::removeTokens ( double  tokens)
inlineoverridevirtual

Implements inet::queueing::ITokenStorage.

34 { throw cRuntimeError("TODO"); }

◆ resolveDirective()

const char * inet::queueing::TokenBasedServer::resolveDirective ( char  directive) const
overridevirtual

Reimplemented from inet::queueing::PacketProcessorBase.

92 {
93  static std::string result;
94  switch (directive) {
95  case 'n': {
96  std::stringstream stream;
97  stream << numTokens;
98  result = stream.str();
99  break;
100  }
101  default:
102  return PacketServerBase::resolveDirective(directive);
103  }
104  return result.c_str();
105 }

Member Data Documentation

◆ maxNumTokens

double inet::queueing::TokenBasedServer::maxNumTokens = NaN
protected

Referenced by addTokens(), and initialize().

◆ numTokens

double inet::queueing::TokenBasedServer::numTokens = 0
protected

◆ tokenConsumptionPerBitParameter

cPar* inet::queueing::TokenBasedServer::tokenConsumptionPerBitParameter = nullptr
protected

Referenced by initialize(), and processPackets().

◆ tokenConsumptionPerPacketParameter

cPar* inet::queueing::TokenBasedServer::tokenConsumptionPerPacketParameter = nullptr
protected

Referenced by initialize(), and processPackets().

◆ tokensDepletedSignaled

bool inet::queueing::TokenBasedServer::tokensDepletedSignaled = true
protected

Referenced by addTokens(), and processPackets().


The documentation for this class was generated from the following files:
inet::INITSTAGE_LAST
INET_API InitStage INITSTAGE_LAST
Operations that no other initializations can depend on, e.g.
inet::queueing::TokenBasedServer::processPackets
virtual void processPackets()
Definition: TokenBasedServer.cc:33
inet::queueing::PacketProcessorBase::pushOrSendPacket
virtual void pushOrSendPacket(Packet *packet, cGate *gate, IPassivePacketSink *consumer)
Definition: PacketProcessorBase.cc:126
inet::queueing::PacketServerBase::consumer
IPassivePacketSink * consumer
Definition: PacketServerBase.h:25
inet::queueing::TokenBasedServer::maxNumTokens
double maxNumTokens
Definition: TokenBasedServer.h:22
inet::queueing::TokenBasedServer::tokensDepletedSignaled
bool tokensDepletedSignaled
Definition: TokenBasedServer.h:24
inet::tokensAddedSignal
simsignal_t tokensAddedSignal
Definition: Simsignals.cc:122
inet::queueing::IPassivePacketSource::canPullPacket
virtual Packet * canPullPacket(cGate *gate) const =0
Returns the packet that can be pulled at the given gate.
inet::queueing::TokenBasedServer::tokenConsumptionPerBitParameter
cPar * tokenConsumptionPerBitParameter
Definition: TokenBasedServer.h:21
inet::packetPulledSignal
simsignal_t packetPulledSignal
Definition: Simsignals.cc:105
inet::queueing::PacketProcessorBase::processedTotalLength
b processedTotalLength
Definition: PacketProcessorBase.h:31
inet::queueing::PacketServerBase::provider
IPassivePacketSource * provider
Definition: PacketServerBase.h:22
inet::packetPushedSignal
simsignal_t packetPushedSignal
Definition: Simsignals.cc:99
inet::queueing::PacketProcessorBase::resolveDirective
virtual const char * resolveDirective(char directive) const override
Definition: PacketProcessorBase.cc:407
EV_FIELD
#define EV_FIELD(...)
Definition: INETDefs.h:112
inet::queueing::PacketServerBase::initialize
virtual void initialize(int stage) override
Definition: PacketServerBase.cc:15
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::queueing::PacketProcessorBase::numProcessedPackets
int numProcessedPackets
Definition: PacketProcessorBase.h:30
inet::tokensDepletedSignal
simsignal_t tokensDepletedSignal
Definition: Simsignals.cc:124
inet::queueing::PacketProcessorBase::updateDisplayString
virtual void updateDisplayString() const
Definition: PacketProcessorBase.cc:399
Enter_Method
#define Enter_Method(...)
Definition: SelfDoc.h:71
inet::queueing::PacketServerBase::outputGate
cGate * outputGate
Definition: PacketServerBase.h:24
inet::queueing::PacketProcessorBase::displayStringTextFormat
const char * displayStringTextFormat
Definition: PacketProcessorBase.h:29
inet::tokensRemovedSignal
simsignal_t tokensRemovedSignal
Definition: Simsignals.cc:123
inet::queueing::TokenBasedServer::tokenConsumptionPerPacketParameter
cPar * tokenConsumptionPerPacketParameter
Definition: TokenBasedServer.h:20
EV_ENDL
#define EV_ENDL
Definition: INETDefs.h:114
inet::queueing::TokenBasedServer::numTokens
double numTokens
Definition: TokenBasedServer.h:25
inet::queueing::IPassivePacketSource::pullPacket
virtual Packet * pullPacket(cGate *gate)=0
Pulls the packet from the packet source at the given gate.
inet::queueing::PacketServerBase::inputGate
cGate * inputGate
Definition: PacketServerBase.h:21