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

A "Realtime" VideoStream client application. More...

#include <UdpVideoStreamClient.h>

Inheritance diagram for inet::UdpVideoStreamClient:
inet::ApplicationBase inet::UdpSocket::ICallback inet::OperationalBase inet::OperationalMixin< cSimpleModule > inet::ILifecycle

Public Member Functions

 UdpVideoStreamClient ()
 
virtual ~UdpVideoStreamClient ()
 
- Public Member Functions inherited from inet::ApplicationBase
 ApplicationBase ()
 
- Public Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual ~OperationalMixin ()
 }@ More...
 
- Public Member Functions inherited from inet::ILifecycle
virtual ~ILifecycle ()
 
- Public Member Functions inherited from inet::UdpSocket::ICallback
virtual ~ICallback ()
 

Protected Member Functions

virtual int numInitStages () const override
 
virtual void initialize (int stage) override
 
virtual void finish () override
 
virtual void handleMessageWhenUp (cMessage *msg) override
 
virtual void requestStream ()
 
virtual void receiveStream (Packet *msg)
 
virtual void handleStartOperation (LifecycleOperation *operation) override
 
virtual void handleStopOperation (LifecycleOperation *operation) override
 
virtual void handleCrashOperation (LifecycleOperation *operation) override
 
virtual void socketDataArrived (UdpSocket *socket, Packet *packet) override
 Notifies about data arrival, packet ownership is transferred to the callee. More...
 
virtual void socketErrorArrived (UdpSocket *socket, Indication *indication) override
 Notifies about error indication arrival, indication ownership is transferred to the callee. More...
 
virtual void socketClosed (UdpSocket *socket) override
 Notifies about socket closed, indication ownership is transferred to the callee. More...
 
- Protected Member Functions inherited from inet::ApplicationBase
virtual bool isInitializeStage (int stage) const override
 
virtual bool isModuleStartStage (int stage) const override
 
virtual bool isModuleStopStage (int stage) const override
 
- Protected Member Functions inherited from inet::OperationalMixin< cSimpleModule >
virtual int numInitStages () const override
 
virtual void refreshDisplay () const override
 
virtual void handleMessage (cMessage *msg) override
 
virtual void handleMessageWhenDown (cMessage *msg)
 
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 Attributes

UdpSocket socket
 
cMessage * selfMsg = nullptr
 
- Protected Attributes inherited from inet::OperationalMixin< cSimpleModule >
State operationalState
 
simtime_t lastChange
 
Operation activeOperation
 
cMessage * activeOperationTimeout
 
cMessage * activeOperationExtraTimer
 

Additional Inherited Members

- Protected Types inherited from inet::OperationalMixin< cSimpleModule >
enum  State
 

Detailed Description

A "Realtime" VideoStream client application.

Basic video stream application. Clients connect to server and get a stream of video back.

Constructor & Destructor Documentation

◆ UdpVideoStreamClient()

inet::UdpVideoStreamClient::UdpVideoStreamClient ( )
inline
52 {}

◆ ~UdpVideoStreamClient()

virtual inet::UdpVideoStreamClient::~UdpVideoStreamClient ( )
inlinevirtual
53 { cancelAndDelete(selfMsg); }

Member Function Documentation

◆ finish()

void inet::UdpVideoStreamClient::finish ( )
overrideprotectedvirtual
31 {
32  ApplicationBase::finish();
33 }

◆ handleCrashOperation()

void inet::UdpVideoStreamClient::handleCrashOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

108 {
109  cancelEvent(selfMsg);
110  if (operation->getRootModule() != getContainingNode(this)) // closes socket when the application crashed only
111  socket.destroy(); // TODO in real operating systems, program crash detected by OS and OS closes sockets of crashed programs.
112 }

◆ handleMessageWhenUp()

void inet::UdpVideoStreamClient::handleMessageWhenUp ( cMessage *  msg)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

36 {
37  if (msg->isSelfMessage()) {
38  requestStream();
39  }
40  else
42 }

◆ handleStartOperation()

void inet::UdpVideoStreamClient::handleStartOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

94 {
95  simtime_t startTimePar = par("startTime");
96  simtime_t startTime = std::max(startTimePar, simTime());
97  scheduleAt(startTime, selfMsg);
98 }

◆ handleStopOperation()

void inet::UdpVideoStreamClient::handleStopOperation ( LifecycleOperation operation)
overrideprotectedvirtual

Implements inet::OperationalMixin< cSimpleModule >.

101 {
102  cancelEvent(selfMsg);
103  socket.close();
104  delayActiveOperationFinish(par("stopOperationTimeout"));
105 }

◆ initialize()

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

Reimplemented from inet::OperationalMixin< cSimpleModule >.

22 {
24 
25  if (stage == INITSTAGE_LOCAL) {
26  selfMsg = new cMessage("UDPVideoStreamStart");
27  }
28 }

◆ numInitStages()

virtual int inet::UdpVideoStreamClient::numInitStages ( ) const
inlineoverrideprotectedvirtual
34 { return NUM_INIT_STAGES; }

◆ receiveStream()

void inet::UdpVideoStreamClient::receiveStream ( Packet msg)
protectedvirtual
87 {
88  EV_INFO << "Video stream packet: " << UdpSocket::getReceivedPacketInfo(pk) << endl;
89  emit(packetReceivedSignal, pk);
90  delete pk;
91 }

Referenced by socketDataArrived().

◆ requestStream()

void inet::UdpVideoStreamClient::requestStream ( )
protectedvirtual
63 {
64  int svrPort = par("serverPort");
65  int localPort = par("localPort");
66  const char *address = par("serverAddress");
67  L3Address svrAddr = L3AddressResolver().resolve(address);
68 
69  if (svrAddr.isUnspecified()) {
70  EV_ERROR << "Server address is unspecified, skip sending video stream request\n";
71  return;
72  }
73 
74  EV_INFO << "Requesting video stream from " << svrAddr << ":" << svrPort << "\n";
75 
76  socket.setOutputGate(gate("socketOut"));
77  socket.bind(localPort);
78  socket.setCallback(this);
79 
80  Packet *pk = new Packet("VideoStrmReq");
81  const auto& payload = makeShared<ByteCountChunk>(B(1)); // FIXME set packet length
82  pk->insertAtBack(payload);
83  socket.sendTo(pk, svrAddr, svrPort);
84 }

Referenced by handleMessageWhenUp().

◆ socketClosed()

void inet::UdpVideoStreamClient::socketClosed ( UdpSocket socket)
overrideprotectedvirtual

Notifies about socket closed, indication ownership is transferred to the callee.

Implements inet::UdpSocket::ICallback.

57 {
58  if (operationalState == State::STOPPING_OPERATION)
59  startActiveOperationExtraTimeOrFinish(par("stopOperationExtraTime"));
60 }

◆ socketDataArrived()

void inet::UdpVideoStreamClient::socketDataArrived ( UdpSocket socket,
Packet packet 
)
overrideprotectedvirtual

Notifies about data arrival, packet ownership is transferred to the callee.

Implements inet::UdpSocket::ICallback.

45 {
46  // process incoming packet
47  receiveStream(packet);
48 }

◆ socketErrorArrived()

void inet::UdpVideoStreamClient::socketErrorArrived ( UdpSocket socket,
Indication indication 
)
overrideprotectedvirtual

Notifies about error indication arrival, indication ownership is transferred to the callee.

Implements inet::UdpSocket::ICallback.

51 {
52  EV_WARN << "Ignoring UDP error report " << indication->getName() << endl;
53  delete indication;
54 }

Member Data Documentation

◆ selfMsg

cMessage* inet::UdpVideoStreamClient::selfMsg = nullptr
protected

◆ socket

UdpSocket inet::UdpVideoStreamClient::socket
protected

The documentation for this class was generated from the following files:
inet::UdpSocket::setOutputGate
void setOutputGate(cGate *toUdp)
Sets the gate on which to send to UDP.
Definition: UdpSocket.h:117
inet::OperationalMixin< cSimpleModule >::operationalState
State operationalState
Definition: OperationalMixin.h:23
inet::UdpSocket::bind
void bind(int localPort)
Bind the socket to a local port number.
Definition: UdpSocket.cc:34
inet::UdpSocket::sendTo
void sendTo(Packet *msg, L3Address destAddr, int destPort)
Sends a data packet to the given address and port.
Definition: UdpSocket.cc:69
inet::UdpSocket::getReceivedPacketInfo
static std::string getReceivedPacketInfo(Packet *pk)
Utility function: returns a line of information about a packet received via UDP.
Definition: UdpSocket.cc:315
inet::getContainingNode
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:40
inet::OperationalMixin< cSimpleModule >::initialize
virtual void initialize(int stage) override
Definition: OperationalMixinImpl.h:26
inet::UdpSocket::destroy
virtual void destroy() override
Notify the protocol that the owner of ISocket has destroyed the socket.
Definition: UdpSocket.cc:98
inet::UdpVideoStreamClient::selfMsg
cMessage * selfMsg
Definition: UdpVideoStreamClient.h:31
inet::UdpSocket::setCallback
void setCallback(ICallback *cb)
Sets a callback object, to be used with processMessage().
Definition: UdpSocket.cc:338
inet::units::units::B
intscale< b, 1, 8 > B
Definition: Units.h:1168
inet::packetReceivedSignal
simsignal_t packetReceivedSignal
Definition: Simsignals.cc:97
inet::UdpSocket::processMessage
virtual void processMessage(cMessage *msg) override
Examines the message, takes ownership, and updates socket state.
Definition: UdpSocket.cc:343
inet::UdpVideoStreamClient::requestStream
virtual void requestStream()
Definition: UdpVideoStreamClient.cc:62
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::UdpSocket::close
virtual void close() override
Unbinds the socket.
Definition: UdpSocket.cc:87
NUM_INIT_STAGES
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
inet::sctp::max
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
inet::UdpVideoStreamClient::socket
UdpSocket socket
Definition: UdpVideoStreamClient.h:30
inet::OperationalMixin< cSimpleModule >::delayActiveOperationFinish
virtual void delayActiveOperationFinish(simtime_t timeout)
Definition: OperationalMixinImpl.h:161
inet::OperationalMixin< cSimpleModule >::startActiveOperationExtraTimeOrFinish
virtual void startActiveOperationExtraTimeOrFinish(simtime_t extraTime)
Definition: OperationalMixinImpl.h:179
inet::UdpVideoStreamClient::receiveStream
virtual void receiveStream(Packet *msg)
Definition: UdpVideoStreamClient.cc:86