00001 00002 #ifndef CTasksChainControler_h 00003 #define CTasksChainControler_h 1 00004 00005 // CReportTasksControler 00006 #include "jic/task/CReportTasksControler.hpp" 00007 // CChainTask 00008 #include "jic/task/CChainTask.hpp" 00009 00010 namespace TASK { 00011 00012 // Controlador especifico para cadenas de Tasks. 00013 // 00014 // Una vez creadas las tasks hay que pasarselas al 00015 // controlador en orden. 00016 // 00017 // A partir de una task siempre podremos saber cual es la 00018 // siguiente, pero al tener este objeto especifico, sabemos 00019 // que estamos ante una cadena. 00020 // 00021 // Si cambia el estado de una tarea a error se podrá 00022 // realiar un tratamiento especifico. El que tiene 00023 // conocimiento de la tarea es el cliente. 00024 // Por defecto el tratamiento será parar toda la cadena. 00025 // 00026 // Nota: Si una tarea intermedia se ha parado, y la cadena 00027 // completa se para mediante paso de mensajes, el 00028 // controlador será el responsable de parar la parte final 00029 // insertando en la cola de entrada del siguiente objeto el 00030 // mensaje de parada. 00031 00032 template <class MessageType> 00033 class CTasksChainControler : public CReportTasksControler 00034 { 00035 00036 public: 00037 CTasksChainControler(); 00038 00039 CTasksChainControler (const std::string &strName, long nReportPeriod = 0, CTaskReportObject *reportObject = 0); 00040 00041 ~CTasksChainControler(); 00042 00043 void pushTask (CChainTask<MessageType> *pTask); 00044 00045 virtual void start (); 00046 00047 virtual void stop (); 00048 00049 virtual void update (CStateObservable& obj); 00050 00051 // Additional Public Declarations 00052 00053 protected: 00054 00055 void stopChainFromTask (CTask *pTask); 00056 00057 // Additional Protected Declarations 00058 00059 private: 00060 CTasksChainControler(const CTasksChainControler< MessageType > &right); 00061 00062 CTasksChainControler< MessageType > & operator=(const CTasksChainControler< MessageType > &right); 00063 00064 // Additional Private Declarations 00065 00066 private: 00067 // Additional Implementation Declarations 00068 00069 }; 00070 00071 // Parameterized Class TASK::CTasksChainControler 00072 00073 } // namespace TASK 00074 00075 #if defined (ACE_TEMPLATES_REQUIRE_SOURCE) 00076 #include "CTasksChainControler.cpp" 00077 #endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ 00078 00079 #endif