content.txt 3.58 KB
!1 Création d'un nouveau process
!2 Objectif
L'objectif de cette page est de créer un nouveau process. 
Cela permettra de créer une un fichier xml décrivant un paramètre contenant une balise process du type '''!-<process>#newProcess($dst)</process>-!'''
!2 Procédure
Il faut créer un plugin [[cf. AMDA plugin][.HelpDev.AmdaPlugin]] enregistrant le nouveau '''Process'''
Il faut créer au moins une class dérivant de '''!-AMDA::Parameters::Process_CRTP<maClass>-!'''.
!2 Example:
!3 Création la fonction '''#boxcar($density;1200)'''
Cette fonction calculera la moyenne sur 1200 sec du parametre density.
!4 1- Créer la class !-BoxcarProcess-! 
Il faut dériver de '''!-AMDA::Parameters::Process_CRTP<maClass>-!''' et implémenter les méthodes:
 * !-void DataClient::establishConnection()-! : permet de calculer des informations static (comme parser la formule de process) et doit ouvrir les connections avec son _parameterInput 
 * !-double  DataClient::timeOfDataPreserve()-! : doit retourner l’intervalle temps nécessaire pour assurer l'intégrité des calcules, ici la taille du boxcar: 1200
 * !-void DataWriter::init()-! :permet de calculer des informations static et doit récupérer les !-ParamData-! d'input et créer les !-ParamData-!d'output et l'operation.
 * !-unsigned int DataWriter::write()-! :doit écrire les données dans le !-ParamData-! d'output et retourner le nombre de données qu'il a écrit.
	 


son contenue sera du type:
 * '''!-BoxcarProcess.hh-!'''
{{{
/*
 * BoxcarProcess.hh
 *
 *  Created on: Dec 12, 2012
 *      Author: f.casimir
 */

#ifndef BoxcarProcess_HH_
#define BoxcarProcess_HH_

#include "Process.hh"

namespace AMDA {
namespace Parameters {

/**
 * @class BoxcarProcess
 * @brief mean Boxcar  process.
 * @details This class represents the process that must computed the mean boxcar of, data. The data type is an unknown ParamData.
 *  To do this it implements the Process interface and delegates the compute to an output ParamData to a Boxcar class.
 * This class is builded from the BoxcarCreator visitor.
 */
class BoxcarProcess : public AMDA::Parameters::Process_CRTP<BoxcarProcess> {
public:
	/**
	 * @brief Constructor.
	 */
	BoxcarProcess(Parameter &parameter);
	/**
	 * @brief Copy Constructor.
	 */
	BoxcarProcess(const BoxcarProcess& pProcess, Parameter &pParameter) ;
	/**
	 * @brief Destructor.
	 */
	~BoxcarProcess();

	// Overload DataClient methods

	/**
	 * @overload DataClient::establishConnection()
	 */
	void establishConnection();

	/**
	 * @overload DataClient::timeOfDataPreserve()
	 */
	virtual double  timeOfDataPreserve() {return _boxcarTime;}


	// Overload DataWriter methods
	/**
	 * @overload DataWriter::init()
	 */
	void init();
	/**
	 * @overload DataWriter::write()
	 */
	unsigned int write();

protected:
	/**
	 * @brief If the expression is not a Single parameter,
	 * it must ask the creation of a parameter responsible of the formula calculation.
	 */
	void parse();

private:
	/**
	 * @brief It the server of the data to shift.
	 */
	ParameterSPtr _parameterInput;

	/**
	 * @brief It is the channel of data to shift.
	 */
	ParamData *   _paramInput;


	/**
	 * @brief The time ox mean boxcar.
	 */
	double _boxcarTime;
};

} /* namespace Parameters */
} /* namespace AMDA */
#endif /* BoxcarProcess_HH_ */

}}}

!4 2- Suivre la procédure de création de plugin
[[cf. AMDA plugin][.HelpDev.AmdaPlugin]]
!5 La fonction registerPlugin devra contenir les lignes suivante:
{{{
	ProcessFactory factProcessBoxcarProcess  = boost::factory<BoxcarProcess*>();
	ServicesServer::getInstance()->addProcessFactory("boxcar", factProcessBoxcarProcess);
}}}



!contents -R2 -g -p -f -h