/*! \page agent Agent

<center><A HREF="group__Agent.html">Link to the Agent module (source code documentation)</A></center>

<hr> 

\section agent_introduction Introduction

The IDEA::Agent module contains code which has the following responsiblities:

\li \ref message_traffic via an IDEA::AgentRelay instance
\li \ref internal_time via an IDEA::AgentTimingService instance
\li \ref event_handler via a IDEA::TimeEventHandler instance
\li Defines \ref command_line_options

\subsection internal_time Coordinating the internal time and scheduling and handling time events for the agent

Each agent must have a notion of time to be able to plan and execute. The IDEA::Agent represents time 
in the datastructure IDEA::Time and maintains a clock via an instance of IDEA::AgentTimingService. 

\subsection  event_handler Handling a time event

An IDEA::Agent is an event driven system and we distinguish the following high level events:

\subsubsection wakeup_events Wakeup event

A wakeup event is a scheduled event to wakeup the agent, the behavior associated with this event depends
on the IDEA::TimeEventHandler instance registered to the IDEA::AgentTimingService.

\subsubsection reboot_events Reboot event

A reboot event is a scheduled event to reboot the agent, the behavior associated with this event depends
on the IDEA::TimeEventHandler instance registered to the IDEA::AgentTimingService.

\subsection message_traffic Coordinating message traffic to and from the IDEA::Agent

An IDEA::Agent communicates with external systems via incomming and outgoing messages. 

Incomming messages can come in at any given time and the IDEA::AgentRelay instance will notify the appropriate IDEA::Reactor instance
of the incomming message, the behavior associated with the message depends on the IDEA::Reactor instance notified. Examples of
IDEA::Reactor instance are a ReactivePlanner (seperate module) or a IDEA::ShutdownReactor.

Outgoing messages are coordinated by the IDEA::AgentRelay instance. The IDEA::AgentRelay creates the appropriate data structures and 
notifies the appropriate IDEA::ComRelay instance, the way (technology) the message will be send out depends on the IDEA::ComRelay instance 
notified.

\subsection command_line_options Command line options for an IDEA::Agent

Independent of the application invoking the agent classes some of the classes will
assume you provide some command line options:

Command line options:
\li \b -f  name of the file containing objects/timelines to print
\li \b -h  help, prints the usage
\li \b -i  initial state file, mandatory
\li \b -m  model, file-name of the XIDDL-model, mandatory
\li \b -o  general output level {low,medium,high,debug}, mandatory
\li \b -p  poolname of the shared memory where the timing service resides (default 'TimingService')
\li \b -s  modules file name, containing location of shared libraries making up the modules loaded before initialization, mandatory
\li \b -v  enable creation of visualization data
\li \b -x  modules file name which will be loaded after instantiating an agent and reactiveplanner

\todo Create section on the pattern used to extend the command line options etc...

*/
