A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
application.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2006 Georgia Tech Research Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: George F. Riley<riley@ece.gatech.edu>
18 */
19
20#ifndef APPLICATION_H
21#define APPLICATION_H
22
23#include "node.h"
24
25#include "ns3/event-id.h"
26#include "ns3/nstime.h"
27#include "ns3/object.h"
28#include "ns3/ptr.h"
29
30namespace ns3
31{
32
33class Node;
34
35/**
36 * \addtogroup applications Applications
37 *
38 * Class ns3::Application can be used as a base class for ns3 applications.
39 * Applications are associated with individual nodes. Each node
40 * holds a list of references (smart pointers) to its applications.
41 *
42 * Conceptually, an application has zero or more ns3::Socket
43 * objects associated with it, that are created using the Socket
44 * creation API of the Kernel capability. The Socket object
45 * API is modeled after the
46 * well-known BSD sockets interface, although it is somewhat
47 * simplified for use with ns3. Further, any socket call that
48 * would normally "block" in normal sockets will return immediately
49 * in ns3. A set of "upcalls" are defined that will be called when
50 * the previous blocking call would normally exit. THis is documented
51 * in more detail Socket class in socket.h.
52 *
53 * The main purpose of the base class application public API is to
54 * provide a uniform way to start and stop applications.
55 */
56
57/**
58 * \brief The base class for all ns3 applications
59 *
60 */
61class Application : public Object
62{
63 public:
64 /**
65 * \brief Get the type ID.
66 * \return the object TypeId
67 */
68 static TypeId GetTypeId();
70 ~Application() override;
71
72 /**
73 * \brief Specify application start time
74 * \param start Start time for this application,
75 * relative to the current simulation time.
76 *
77 * Applications start at various times in the simulation scenario.
78 * This method specifies when the application should be
79 * started. The application subclasses should override the
80 * private "StartApplication" method defined below, which is called at the
81 * time specified, to cause the application to begin.
82 */
83 void SetStartTime(Time start);
84
85 /**
86 * \brief Specify application stop time
87 * \param stop Stop time for this application, relative to the
88 * current simulation time.
89 *
90 * Once an application has started, it is sometimes useful
91 * to stop the application. This method specifies when an
92 * application is to stop. The application subclasses should override
93 * the private StopApplication method, to be notified when that
94 * time has come.
95 */
96 void SetStopTime(Time stop);
97
98 /**
99 * \returns the Node to which this Application object is attached.
100 */
101 Ptr<Node> GetNode() const;
102
103 /**
104 * \param node the node to which this Application object is attached.
105 */
106 void SetNode(Ptr<Node> node);
107
108 /**
109 * \brief Assign a fixed random variable stream number to the random variables
110 * used by this Application object.
111 *
112 * \param stream first stream index to use
113 * \return the number of stream indices assigned by this Application object
114 */
115 virtual int64_t AssignStreams(int64_t stream);
116
117 /**
118 * \brief Common callback signature for packet delay and address.
119 *
120 * \param delay The packet delay.
121 * \param from The source socket address associated with the packet,
122 * indicating the packet's origin.
123 */
124 typedef void (*DelayAddressCallback)(const Time& delay, const Address& from);
125
126 /**
127 * \brief Common signature used by callbacks to application's state
128 * transition trace source.
129 * \param oldState The name of the previous state.
130 * \param newState The name of the current state.
131 */
132 typedef void (*StateTransitionCallback)(const std::string& oldState,
133 const std::string& newState);
134
135 private:
136 /**
137 * \brief Application specific startup code
138 *
139 * The StartApplication method is called at the start time specified by Start
140 * This method should be overridden by all or most application
141 * subclasses.
142 */
143 virtual void StartApplication();
144
145 /**
146 * \brief Application specific shutdown code
147 *
148 * The StopApplication method is called at the stop time specified by Stop
149 * This method should be overridden by all or most application
150 * subclasses.
151 */
152 virtual void StopApplication();
153
154 protected:
155 void DoDispose() override;
156 void DoInitialize() override;
157
158 Ptr<Node> m_node; //!< The node that this application is installed on
159 Time m_startTime; //!< The simulation time that the application will start
160 Time m_stopTime; //!< The simulation time that the application will end
161 EventId m_startEvent; //!< The event that will fire at m_startTime to start the application
162 EventId m_stopEvent; //!< The event that will fire at m_stopTime to end the application
163};
164
165} // namespace ns3
166
167#endif /* APPLICATION_H */
a polymophic address class
Definition: address.h:101
The base class for all ns3 applications.
Definition: application.h:62
EventId m_startEvent
The event that will fire at m_startTime to start the application.
Definition: application.h:161
void DoInitialize() override
Initialize() implementation.
Definition: application.cc:96
void SetNode(Ptr< Node > node)
Definition: application.cc:115
void DoDispose() override
Destructor implementation.
Definition: application.cc:86
Time m_startTime
The simulation time that the application will start.
Definition: application.h:159
Time m_stopTime
The simulation time that the application will end.
Definition: application.h:160
~Application() override
Definition: application.cc:66
void SetStopTime(Time stop)
Specify application stop time.
Definition: application.cc:79
virtual void StopApplication()
Application specific shutdown code.
Definition: application.cc:130
virtual void StartApplication()
Application specific startup code.
Definition: application.cc:124
void SetStartTime(Time start)
Specify application start time.
Definition: application.cc:72
void(* DelayAddressCallback)(const Time &delay, const Address &from)
Common callback signature for packet delay and address.
Definition: application.h:124
EventId m_stopEvent
The event that will fire at m_stopTime to end the application.
Definition: application.h:162
void(* StateTransitionCallback)(const std::string &oldState, const std::string &newState)
Common signature used by callbacks to application's state transition trace source.
Definition: application.h:132
virtual int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this Application object.
Definition: application.cc:136
static TypeId GetTypeId()
Get the type ID.
Definition: application.cc:41
Ptr< Node > GetNode() const
Definition: application.cc:108
Ptr< Node > m_node
The node that this application is installed on.
Definition: application.h:158
An identifier for simulation events.
Definition: event-id.h:55
A base class which provides memory management and object aggregation.
Definition: object.h:89
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.