Helpers are a nice way to install "stuff" on a node. What's really installed is the "stuff". As an example:
ApplicationContainer
UdpTraceClientHelper::Install (NodeContainer c)
{
ApplicationContainer apps;
for (NodeContainer::Iterator i = c.Begin (); i != c.End (); ++i)
{
Ptr<Node> node = *i;
Ptr<UdpTraceClient> client = m_factory.Create<UdpTraceClient> ();
node->AddApplication (client);
apps.Add (client);
}
return apps;
}
This is an internal function, it's called "behind the hood" for you. However looking at it is good: what's installed in the node is a Ptr<UdpTraceClient>.
So, you're *using* an Helper, but what's installed (and runs) is the Application.
About periodic functions. You're right, there's no such a thing in ns-3, but there are a lot of functions called by themselves over and over (after a specific time).
Check this function:
void
UdpClient::Send (void)
Who's calling it ?
Nobody, except...
m_sendEvent = Simulator::Schedule (Seconds (0.0), &UdpClient::Send, this);
m_sendEvent = Simulator::Schedule (m_interval, &UdpClient::Send, this);
The first line is in void UdpClient::StartApplication (void), the second is in void UdpClient::Send (void).
Now, UdpClient::StartApplication is called at application start (again, under the hoods), the second is... calling itself after a specific time (m_interval).
That's a periodic function :)
Last but not least, note the Simulator::Cancel (m_sendEvent); in void UdpClient::StopApplication (void). It's stopping the periodic function when the application stops (otherwise, it will run forever).
Hope this helps,
T.