Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

CChainTask.hpp

Go to the documentation of this file.
00001 
00002 #ifndef CChainTask_h
00003 #define CChainTask_h 1
00004 
00005 // CTask
00006 #include "jic/task/CTask.hpp"
00007 #include "jic/task/CMessageBlock.hpp"
00008 
00009 namespace TASK {
00010   template <class MessageType> class CTasksChainControler;
00011 
00012 } // namespace TASK
00013 
00014 namespace TASK {
00015 
00016   //    Clase que auna funcionalidad común a una cadena objetos,
00017   //    y clase padre de todos los objetos de la cadena.
00018   //    - El objeto no es instanciable
00019   //    Notas:
00020   //    - De momento solo se soporta un controlador por cadena
00021   //    de produccion.
00022   //    - @@ La problematica de más de 1 cotnrolador está en que
00023   //    si una tarea se pone como error o se para y la siguiente
00024   //    está bajo otro controlador, habrá que decidir como se
00025   //    actua (pegar a esto una pensada)
00026 
00027   template <class MessageType>
00028   class CChainTask : public CTask  
00029   {
00030 
00031     public:
00032         CChainTask();
00033 
00034         CChainTask (std::string strName, int nThreads = 1, CTasksChainControler<MessageType> *pTaskControler = 0);
00035 
00036         virtual ~CChainTask();
00037 
00038         virtual EStoppingWay stoppingWay ();
00039 
00040         //      Se ha creado a pelusqui, ya que Rational no la generaba
00041         //      correctamente automáticamente (será por lo de ser un ptr
00042         //      a template).
00043         CChainTask<MessageType> * get_pNext ();
00044 
00045         //      Se ha creado a pelusqui, ya que Rational no la generaba
00046         //      correctamente automáticamente (será por lo de ser un ptr
00047         //      a template).
00048         void set_pNext (CChainTask<MessageType> *pNext);
00049 
00050         //      Funcion que permite a un cliente meter desde fuera
00051         //      mensajes en la cola de entrada del task
00052         //      Nos aseguramos que el tipo sea correcto
00053         void put(CMessageBlock<MessageType> *data);
00054         
00055         //      Version que se encarga de la creación del bloque
00056         void put(MessageType *data);
00057 
00058     protected:
00059 
00060         //      Metodo a invocar para poner los mensajes en la cola de
00061         //      salida
00062         void msgToOutput (ACE_Message_Block *data) /*throw (CTaskException)*/;
00063 
00064         //      Metodo a invocar para obtener mensajes de la cola
00065         void msgFromInput (ACE_Message_Block *&data) /*throw (CTaskException)*/;
00066 
00067         virtual void preStoppingActions ();
00068 
00069         //      Metodo para implementar por lo hijos. Cada tipo de
00070         //      componente de la cadena realizará unas acciones
00071         //      especificas.
00072         //      En el sólo se tratarán mensajes de tipo MB_DATA
00073         virtual void specificStep () /* throw (CTaskException) */ = 0;
00074 
00075       // Additional Protected Declarations
00076 
00077     private:
00078         CChainTask(const CChainTask< MessageType > &right);
00079 
00080         CChainTask< MessageType > & operator=(const CChainTask< MessageType > &right);
00081 
00082         void step ();
00083 
00084         bool haveToStop () throw (CTaskException);
00085 
00086         //      Metodo para retirar un mensaje que sabemos que existe en
00087         //      la cola
00088         void retrieveExistingMessage (ACE_Message_Block *&data) throw (CTaskException);
00089         
00090         void putMessageToTask(CChainTask *task,ACE_Message_Block *data);
00091 
00092       // Additional Private Declarations
00093 
00094     private: 
00095       // Data Members for Associations
00096 
00097         CChainTask *m_pNext;
00098 
00099       // Additional Implementation Declarations
00100 
00101   };
00102 
00103   // Parameterized Class TASK::CChainTask 
00104 
00105   template <class MessageType>
00106   inline CChainTask<MessageType> * CChainTask<MessageType>::get_pNext ()
00107   {
00108     return m_pNext;
00109   }
00110 
00111   template <class MessageType>
00112   inline void CChainTask<MessageType>::set_pNext (CChainTask<MessageType> *pNext)
00113   {
00114     m_pNext = pNext;
00115   }
00116 
00117 } // namespace TASK
00118 
00119 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
00120 #include "CChainTask.cpp"
00121 #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
00122 
00123 #endif

Generated on Wed Mar 5 21:31:47 2003 for JIC by doxygen1.3-rc3