DABC (Data Acquisition Backbone Core)  2.9.9
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Friends
dabc::Application Class Reference

Base class for user-specific applications. More...

#include <dabc/Application.h>

Inheritance diagram for dabc::Application:
dabc::Worker dabc::Object

Public Types

typedef void * ExternalFunction()
 
- Public Types inherited from dabc::Worker
enum  EPriotiryLevels { priorityMaximum = 0 , priorityMinimum = -1 , priorityDefault = -7 , priorityMagic = -77 }
 
enum  EWorkerEventsCodes { evntFirstCore = 1 , evntFirstAddOn = 100 , evntFirstSystem = 200 , evntFirstUser = 1000 }
 

Public Member Functions

 Application (const char *classname=0)
 
virtual const char * ClassName () const
 Returns class name of the object instance. More...
 
virtual bool Find (ConfigIO &cfg)
 Method to locate object in xml file. More...
 
std::string GetState () const
 
virtual ~Application ()
 
- Public Member Functions inherited from dabc::Worker
bool ActivateTimeout (double tmout_sec)
 Method used to produce timeout events in the worker. More...
 
Command Assign (Command cmd)
 ! Assign command with processor before command be submitted to other processor This produce ReplyCommand() call when command execution is finished Command itself returned if operation was successful, otherwise null() command More...
 
void AssignAddon (WorkerAddon *addon)
 Assigns addon to the worker Should be called before worker assigned to the thread. More...
 
bool AssignToThread (ThreadRef thrd, bool sync=true)
 Assign worker to thread, worker becomes active immediately. More...
 
bool CanSubmitCommand () const
 Returns true if command can be submitted to worker. More...
 
RecordField Cfg (const std::string &name, Command cmd=nullptr) const
 Returns configuration field of specified name Configuration value of specified name searched in following places: More...
 
bool DettachFromThread ()
 Detach worker from the thread, later worker can be assigned to some other thread Method especially useful to normally finish object recursion (if it possible). More...
 
bool Execute (Command cmd, double tmout=-1.)
 Execute command in the processor. More...
 
bool Execute (const std::string &cmd, double tmout=-1.)
 
bool HasThread () const
 Indicates if pointer on thread is not zero; thread-safe. More...
 
bool IsOwnThread () const
 Returns true if called from thread. More...
 
bool MakeThreadForWorker (const std::string &thrdname="")
 Creates appropriate thread for worker and assign worker to the thread. More...
 
Parameter Par (const std::string &name) const
 Returns reference on worker parameter object. More...
 
virtual std::string RequiredThrdClass () const
 Method returns name of required thread class for processor. More...
 
void SetWorkerPriority (int nq)
 
bool Submit (Command cmd)
 Submit command for execution in the processor. More...
 
ThreadRef thread ()
 Return reference on the worker thread; thread-safe. More...
 
std::string ThreadName () const
 Returns name of the worker thread; thread-safe
More...
 
 Worker (Reference parent, const std::string &name)
 
std::string WorkerAddress (bool full=true)
 Return address, which can be used to submit command to the worker If full specified, command can be submitted from any node, which has connection to this node. More...
 
uint32_t WorkerId () const
 
int WorkerPriority () const
 
virtual ~Worker ()
 
- Public Member Functions inherited from dabc::Object
bool AddChild (Object *child, bool withmutex=true) throw ()
 Add object to list of child objects, thread safe More...
 
bool AddChildAt (Object *child, unsigned pos, bool withmutex=true)
 Add object to list of child objects at specified position. More...
 
ObjectFindChild (const char *name) const
 returns pointer on child object with given name More...
 
Reference FindChildRef (const char *name, bool force=false) const throw ()
 returns reference on child object with given name More...
 
bool GetAllChildRef (ReferencesVector *vect) const
 
ObjectGetChild (unsigned n) const
 returns pointer on child object More...
 
Reference GetChildRef (unsigned n) const
 returns reference on child object More...
 
Reference GetFolder (const std::string &name, bool force=false) throw ()
 Return folder of specified name, no special symbols allowed. More...
 
const char * GetName () const
 Returns name of the object, thread safe More...
 
ObjectGetParent () const
 Returns pointer on parent object, thread safe More...
 
Reference GetParentRef () const
 
bool IsChildsHidden () const
 Return true if object wants to hide childs from hierarchy scan, thread safe More...
 
bool IsHidden () const
 Return true if object wants to be hidden from hierarchy scan, thread safe More...
 
bool IsLogging () const
 Return true if object selected for logging, thread safe More...
 
bool IsName (const char *str) const
 Checks if object name is same as provided string, thread safe More...
 
bool IsName (const char *str, int len) const
 Checks if object name is same as provided, thread safe More...
 
bool IsName (const std::string &str) const
 Checks if object name is same as provided string, thread safe More...
 
bool IsNameMatch (const std::string &mask) const
 Check if object name match to the mask. More...
 
bool IsOwner () const
 Returns true if object is owner of its children, thread safe More...
 
bool IsParent (Object *obj) const
 Checks if specified argument is in the list of object parents. More...
 
bool IsTopXmlLevel () const
 Return true if object should be searched in the top level of the xml file, thread safe More...
 
std::string ItemName (bool compact=true) const
 Produce string, which can be used as name argument in dabc::mgr.FindItem(name) call. More...
 
unsigned NumChilds () const
 returns number of child objects More...
 
 Object (const std::string &name, unsigned flags=flIsOwner)
 Resolve problem with child-parent mutex locking. More...
 
 Object (Reference parent, const std::string &name, unsigned flags=flIsOwner)
 
virtual void Print (int lvl=0)
 Print object content on debug output. More...
 
bool RemoveChild (Object *child, bool cleanup=true) throw ()
 Detach child from parent object If cleanup==true and parent is owner of child, child will be destroyed. More...
 
bool RemoveChildAt (unsigned n, bool cleanup=true) throw ()
 Detach child object from parent at specified position If cleanup==true and object is owner of child, child will be destroyed. More...
 
bool RemoveChilds (bool cleanup=true)
 Remove all childs. More...
 
void SetLogging (bool on=true)
 Sets logging flag, thread safe More...
 
virtual ~Object ()
 

Static Public Member Functions

static const char * StateParName ()
 
static const char * stcmdDoConfigure ()
 
static const char * stcmdDoHalt ()
 
static const char * stcmdDoStart ()
 
static const char * stcmdDoStop ()
 
static const char * stFailure ()
 
static const char * stHalted ()
 
static const char * stReady ()
 
static const char * stRunning ()
 
static const char * stTransition ()
 
- Static Public Member Functions inherited from dabc::Worker
static int cmd_bool (bool v)
 
- Static Public Member Functions inherited from dabc::Object
static void Destroy (Object *obj) throw ()
 User method for object destroyment. More...
 
static void InspectGarbageCollector ()
 \ brief Methods to inspect how many objects pointers are remained More...
 
static bool NameMatch (const std::string &name, const std::string &mask)
 Check if name matches to specified mask. More...
 
static bool NameMatchM (const std::string &name, const std::string &mask)
 Check if name matches to specified mask. More...
 
static unsigned NumInstances ()
 Static variable counts total number of objects instances. More...
 

Protected Member Functions

virtual void BuildFieldsMap (RecordFieldsMap *cont)
 Fill fields map, which is relevant for the object Objects hierarchy produced from dabc::Manager. More...
 
virtual bool CleanupApplication ()
 Delete all components created in application, excluding state parameter. More...
 
virtual bool CreateAppModules ()
 Create application modules. More...
 
virtual int DoTransition (const std::string &state, Command cmd)
 Do action, required to make transition into specified state. More...
 
virtual int ExecuteCommand (Command cmd)
 Main method where commands are executed. More...
 
virtual bool IsModulesRunning ()
 Return true if all application-relevant modules are running. More...
 
virtual void ObjectCleanup ()
 Cleanup application. More...
 
virtual void OnThreadAssigned ()
 Method called at thread assignment - application may switch into running state. More...
 
virtual double ProcessTimeout (double)
 Timeout used by application to control stop state of modules and brake application. More...
 
virtual bool ReplyCommand (Command cmd)
 Reimplement this method to react on command reply Return true if command can be destroyed by framework. More...
 
void SetAppState (const std::string &name)
 Directly changes value of the state parameter. More...
 
void SetInitFunc (ExternalFunction *initfunc)
 Set external function, which creates all necessary components of the application. More...
 
virtual int SMCommandTimeout () const
 Default state machine command timeout. More...
 
virtual bool StartModules ()
 Start all application modules. More...
 
virtual bool StopModules ()
 Stop all application modules. More...
 
- Protected Member Functions inherited from dabc::Worker
bool _FireDoNothingEvent ()
 
bool _FireEvent (uint16_t evid)
 
bool _FireEvent (uint16_t evid, uint32_t arg, int pri=-1)
 
bool _IsFireEvent () const
 
bool ActivateMainLoop ()
 
virtual void BeforeHierarchyScan (Hierarchy &h)
 Method called before publisher makes next snapshot of hierarchy. More...
 
void CancelCommands ()
 
void CleanupPublisher (bool sync=true)
 Release reference on publisher and unsubscribe/unpublish all registered entries. More...
 
CommandDefinition CreateCmdDef (const std::string &name)
 
virtual Parameter CreatePar (const std::string &name, const std::string &kind="")
 
virtual bool DestroyByOwnThread ()
 Inherited method from Object, invoked at the moment when worker requested to be destroyed by its thread. More...
 
bool DestroyPar (const std::string &name)
 Method must be used if worker wants to destroy parameter. More...
 
virtual void DoWorkerAfterMainLoop ()
 Internal - function executed after leaving main loop. More...
 
virtual void DoWorkerMainLoop ()
 Internal - entrance function for main loop execution. More...
 
bool ExecuteIn (Worker *dest, Command cmd)
 Executes command in specified worker. More...
 
bool FireEvent (uint16_t evid)
 
bool FireEvent (uint16_t evid, uint32_t arg, int pri=-1)
 
Reference GetPublisher ()
 Return reference on publisher. More...
 
bool IsWorkerActive () const
 Method indicates if worker is running in the thread and accepts normal events. More...
 
virtual void ObjectDestroyed (Object *)
 Method to clear object reference, will be called from thread context (when possible) More...
 
virtual int PreviewCommand (Command cmd)
 This method called before command will be executed. More...
 
virtual void ProcessEvent (const EventId &)
 
virtual void ProcessParameterEvent (const ParameterEvent &evnt)
 Interface method to retrieve subscribed parameter events. More...
 
virtual bool Publish (const Hierarchy &h, const std::string &path)
 
virtual bool PublishPars (const std::string &path)
 
bool RegisterForParameterEvent (const std::string &mask, bool onlychangeevent=true)
 Subscribe to parameter events from local or remote node. More...
 
void SetParValue (const std::string &name, const RecordField &v)
 Set parameter value and sync with worker hierarchy. More...
 
void SetWorkerCfgId (int id=-1)
 Set identifier which can be used in XML configuration ${}# formula It means that correspondent to the ID element of array will be extracted. More...
 
bool SingleLoop (double tmout)
 
virtual bool Subscribe (const std::string &path)
 
virtual bool Unpublish (const Hierarchy &h, const std::string &path)
 
bool UnregisterForParameterEvent (const std::string &mask)
 Unsubscribe to parameter events from local or remote node. More...
 
virtual bool Unsubscribe (const std::string &path)
 
 Worker (const ConstructorPair &pair)
 Special constructor, designed for inherited classes. More...
 
void WorkerSleep (double tmout)
 
- Protected Member Functions inherited from dabc::Object
virtual void _ChildsChanged ()
 Method called when new childs are add or old are removed. More...
 
virtual bool _DoDeleteItself ()
 This method is called at the moment when DecReference think that object can be destroyed and wants to return true. More...
 
bool _IsNormalState ()
 Same as IsNormalState() but without mutex lock - user should lock mutex himself. More...
 
virtual ObjectCreateInstance (const std::string &name)
 Method used to create new item to be placed as child of the object. More...
 
void DeleteThis ()
 Method should be used by the object to delete itself. More...
 
bool DestroyCalledFromOwnThread ()
 Internal DABC method, should be called by thread which was requested to destroy object. More...
 
void FillFullName (std::string &fullname, Object *upto, bool exclude_top_parent=false) const
 Method used to produce full item name,. More...
 
bool GetFlag (unsigned fl) const
 Return value of selected flag, not thread safe
More...
 
bool IsNormalState ()
 Return true if object is in normal state. More...
 
unsigned NumReferences ()
 Return number of references on the object. More...
 
 Object (const ConstructorPair &pair, unsigned flags=flIsOwner)
 
MutexObjectMutex () const
 Returns mutex, used for protection of Object data members. More...
 
void SetAutoDestroy (bool on=true)
 Set autodestroy flag for the object Once enabled, object will be destroyed when last reference will be cleared. More...
 
void SetFlag (unsigned fl, bool on=true)
 Change value of selected flag, not thread safe
More...
 
void SetName (const char *name)
 Changes object name. More...
 
void SetNameDirect (const char *name)
 Changes object name disregard of existing references. More...
 
void SetOwner (bool on=true)
 Specifies if object will be owner of its new childs. More...
 

Protected Attributes

bool fAnyModuleWasRunning
 indicate when any module was running, than once can automatically stop application More...
 
std::string fAppClass
 
std::vector< std::string > fAppDevices
 list of devices, created by application More...
 
std::vector< std::string > fAppModules
 list of modules, created by application More...
 
std::vector< std::string > fAppPools
 list of pools, created by application More...
 
double fConnTimeout
 time for connecting all modules, default 5s More...
 
ExternalFunctionfInitFunc
 
bool fSelfControl
 when true, application itself decide when stop main loop More...
 
- Protected Attributes inherited from dabc::Worker
WorkerAddonRef fAddon
 extension of worker for some special events More...
 
Reference fPublisher
 reference on publisher, once found, remain until end of object live More...
 
ThreadRef fThread
 reference on the thread, once assigned remain whole time More...
 
MutexfThreadMutex
 pointer on main thread mutex More...
 
bool fWorkerActive
 indicates if worker can submit events to the thread More...
 
int fWorkerCfgId
 special ID, can be used in XML configuration in ${}# formula More...
 
CommandsQueue fWorkerCommands
 all kinds of commands, processed by the worker More...
 
int fWorkerCommandsLevel
 Number of process commands recursion. More...
 
unsigned fWorkerFiredEvents
 indicate current balance between fired and processed events, used to correctly halt worker More...
 
Hierarchy fWorkerHierarchy
 place for publishing of worker parameters More...
 
uint32_t fWorkerId
 worker id in thread list, used for events submit More...
 
int fWorkerPriority
 priority of events, submitted by worker to the thread More...
 
- Protected Attributes inherited from dabc::Object
int fObjectBlock
 counter for blocking calls, as long as non-zero, non of child can be removed More...
 
ReferencesVectorfObjectChilds
 list of the child objects More...
 
unsigned fObjectFlags
 flag, protected by the mutex More...
 
MutexfObjectMutex
 mutex protects all private property of the object More...
 
std::string fObjectName
 object name More...
 
Reference fObjectParent
 reference on the parent object More...
 
int fObjectRefCnt
 accounts how many references existing on the object, thread safe More...
 

Private Member Functions

int CallInitFunc (Command statecmd, const std::string &tgtstate)
 

Friends

class ApplicationRef
 
class Manager
 

Additional Inherited Members

- Protected Types inherited from dabc::Object
enum  EFlags {
  flStateMask = 0x000f , flIsOwner = 0x0010 , flCleanup = 0x0020 , flHasThread = 0x0040 ,
  flAutoDestroy = 0x0080 , flLogging = 0x0100 , flNoMutex = 0x0200 , flHidden = 0x0400 ,
  flChildsHidden = 0x0800 , flTopXmlLevel = 0x1000
}
 
- Static Protected Member Functions inherited from dabc::Object
static ConstructorPair MakePair (const std::string &fullname, bool withmanager=true)
 Internal DABC method, used to produce pair - object parent and object name, which is typically should be used as argument in class constructor. More...
 
static ConstructorPair MakePair (Object *prnt, const std::string &fullname, bool withmanager=true)
 Internal DABC method, used to produce pair - object parent and object name, which is typically should be used as argument in class constructor. More...
 
static ConstructorPair MakePair (Reference prnt, const std::string &fullname, bool withmanager=true)
 Internal DABC method, used to produce pair - object parent and object name, which is typically should be used as argument in class constructor. More...
 

Detailed Description

Base class for user-specific applications.

Defines main methods and minimal set of state-machine states and commands. Main aim of writing user-specific application is creation and management of different application components like modules, transports, devices, which cannot be handled by standard DABC methods. For instance, complex connection scheme or modules creation, dependent from application parameters.

Following states are defined in the state-machine: 'Halted' - initial state, no any object existed 'Ready' - all objects are created and ready for start 'Running' - modules are running 'Failure' - error state

Several commands are provided to switch between states: 'DoConfigure' - switch to 'Ready' state 'DoStart' - switch to 'Running' state 'DoStop' - switch to 'Ready' state from 'Running' 'DoHalt' - switch to 'Halted' state

Any command can be executed at any time - state machine will try to bring system to specifies state.

Commands can be triggered via web interface.

By default, application will be brought to the 'Running' state by the dabc. Only if self='false' specified in <Context> node attributes, application will be created and remain as is

Definition at line 73 of file Application.h.

Member Typedef Documentation

◆ ExternalFunction

typedef void* dabc::Application::ExternalFunction()

Definition at line 80 of file Application.h.

Constructor & Destructor Documentation

◆ Application()

dabc::Application::Application ( const char *  classname = 0)

Definition at line 24 of file Application.cxx.

◆ ~Application()

dabc::Application::~Application ( )
virtual

Definition at line 50 of file Application.cxx.

Member Function Documentation

◆ stHalted()

static const char* dabc::Application::stHalted ( )
inlinestatic

Definition at line 83 of file Application.h.

◆ stReady()

static const char* dabc::Application::stReady ( )
inlinestatic

Definition at line 84 of file Application.h.

◆ stRunning()

static const char* dabc::Application::stRunning ( )
inlinestatic

Definition at line 85 of file Application.h.

◆ stFailure()

static const char* dabc::Application::stFailure ( )
inlinestatic

Definition at line 86 of file Application.h.

◆ stTransition()

static const char* dabc::Application::stTransition ( )
inlinestatic

Definition at line 87 of file Application.h.

◆ stcmdDoConfigure()

static const char* dabc::Application::stcmdDoConfigure ( )
inlinestatic

Definition at line 90 of file Application.h.

◆ stcmdDoStart()

static const char* dabc::Application::stcmdDoStart ( )
inlinestatic

Definition at line 91 of file Application.h.

◆ stcmdDoStop()

static const char* dabc::Application::stcmdDoStop ( )
inlinestatic

Definition at line 92 of file Application.h.

◆ stcmdDoHalt()

static const char* dabc::Application::stcmdDoHalt ( )
inlinestatic

Definition at line 93 of file Application.h.

◆ CallInitFunc()

int dabc::Application::CallInitFunc ( Command  statecmd,
const std::string &  tgtstate 
)
private

Definition at line 227 of file Application.cxx.

◆ ExecuteCommand()

int dabc::Application::ExecuteCommand ( dabc::Command  cmd)
protectedvirtual

Main method where commands are executed.

Reimplemented from dabc::Worker.

Definition at line 89 of file Application.cxx.

◆ ReplyCommand()

bool dabc::Application::ReplyCommand ( Command  cmd)
protectedvirtual

Reimplement this method to react on command reply Return true if command can be destroyed by framework.

Reimplemented from dabc::Worker.

Definition at line 66 of file Application.cxx.

◆ OnThreadAssigned()

void dabc::Application::OnThreadAssigned ( )
protectedvirtual

Method called at thread assignment - application may switch into running state.

Reimplemented from dabc::Worker.

Definition at line 54 of file Application.cxx.

◆ ObjectCleanup()

void dabc::Application::ObjectCleanup ( )
protectedvirtual

Cleanup application.

Reimplemented from dabc::Worker.

Definition at line 60 of file Application.cxx.

◆ SetAppState()

void dabc::Application::SetAppState ( const std::string &  name)
protected

Directly changes value of the state parameter.

Definition at line 140 of file Application.cxx.

◆ SetInitFunc()

void dabc::Application::SetInitFunc ( ExternalFunction initfunc)
protected

Set external function, which creates all necessary components of the application.

Definition at line 135 of file Application.cxx.

◆ IsModulesRunning()

bool dabc::Application::IsModulesRunning ( )
protectedvirtual

Return true if all application-relevant modules are running.

Definition at line 216 of file Application.cxx.

◆ CreateAppModules()

virtual bool dabc::Application::CreateAppModules ( )
inlineprotectedvirtual

Create application modules.

Definition at line 134 of file Application.h.

◆ StartModules()

bool dabc::Application::StartModules ( )
protectedvirtual

Start all application modules.

Definition at line 389 of file Application.cxx.

◆ StopModules()

bool dabc::Application::StopModules ( )
protectedvirtual

Stop all application modules.

Definition at line 397 of file Application.cxx.

◆ CleanupApplication()

bool dabc::Application::CleanupApplication ( )
protectedvirtual

Delete all components created in application, excluding state parameter.

Definition at line 405 of file Application.cxx.

◆ DoTransition()

int dabc::Application::DoTransition ( const std::string &  state,
Command  cmd 
)
protectedvirtual

Do action, required to make transition into specified state.

Definition at line 146 of file Application.cxx.

◆ SMCommandTimeout()

virtual int dabc::Application::SMCommandTimeout ( ) const
inlineprotectedvirtual

Default state machine command timeout.

Definition at line 149 of file Application.h.

◆ BuildFieldsMap()

void dabc::Application::BuildFieldsMap ( RecordFieldsMap cont)
protectedvirtual

Fill fields map, which is relevant for the object Objects hierarchy produced from dabc::Manager.

Reimplemented from dabc::Object.

Definition at line 446 of file Application.cxx.

◆ ProcessTimeout()

double dabc::Application::ProcessTimeout ( double  )
protectedvirtual

Timeout used by application to control stop state of modules and brake application.

Reimplemented from dabc::Worker.

Definition at line 200 of file Application.cxx.

◆ StateParName()

static const char* dabc::Application::StateParName ( )
inlinestatic

Definition at line 161 of file Application.h.

◆ GetState()

std::string dabc::Application::GetState ( ) const
inline

Definition at line 163 of file Application.h.

◆ Find()

bool dabc::Application::Find ( ConfigIO cfg)
virtual

Method to locate object in xml file.

Can be reimplemented in derived classes to check more attributes like class name

Reimplemented from dabc::Worker.

Definition at line 435 of file Application.cxx.

◆ ClassName()

virtual const char* dabc::Application::ClassName ( ) const
inlinevirtual

Returns class name of the object instance.

In some cases class name used to correctly locate object in xml file

Reimplemented from dabc::Worker.

Definition at line 167 of file Application.h.

Friends And Related Function Documentation

◆ Manager

friend class Manager
friend

Definition at line 75 of file Application.h.

◆ ApplicationRef

friend class ApplicationRef
friend

Definition at line 76 of file Application.h.

Field Documentation

◆ fAppClass

std::string dabc::Application::fAppClass
protected

Definition at line 101 of file Application.h.

◆ fInitFunc

ExternalFunction* dabc::Application::fInitFunc
protected

Definition at line 103 of file Application.h.

◆ fAnyModuleWasRunning

bool dabc::Application::fAnyModuleWasRunning
protected

indicate when any module was running, than once can automatically stop application

Definition at line 105 of file Application.h.

◆ fSelfControl

bool dabc::Application::fSelfControl
protected

when true, application itself decide when stop main loop

Definition at line 107 of file Application.h.

◆ fConnTimeout

double dabc::Application::fConnTimeout
protected

time for connecting all modules, default 5s

Definition at line 109 of file Application.h.

◆ fAppDevices

std::vector<std::string> dabc::Application::fAppDevices
protected

list of devices, created by application

Definition at line 111 of file Application.h.

◆ fAppPools

std::vector<std::string> dabc::Application::fAppPools
protected

list of pools, created by application

Definition at line 112 of file Application.h.

◆ fAppModules

std::vector<std::string> dabc::Application::fAppModules
protected

list of modules, created by application

Definition at line 113 of file Application.h.


The documentation for this class was generated from the following files: