From ae4d1cfcbbe4c6130bd6370a03f546993a37f567 Mon Sep 17 00:00:00 2001 From: Pixel Date: Mon, 12 Nov 2001 22:20:50 +0000 Subject: Cleaning includes, progressing taskman... --- include/Action.h | 6 +++--- include/Confirm.h | 6 +++--- include/Form.h | 6 +++--- include/Handle.h | 4 ++-- include/HttpServ.h | 10 +++++----- include/IRC.h | 4 ++-- include/Input.h | 4 ++-- include/Menu.h | 6 +++--- include/Message.h | 6 +++--- include/Output.h | 4 ++-- include/ReadJob.h | 2 +- include/Socket.h | 10 +++++----- include/String.h | 2 +- include/Table.h | 6 +++--- include/Task.h | 15 ++++++++++++--- include/TaskMan.h | 6 +++--- include/Variables.h | 6 +++--- lib/Task.cc | 34 ++++++++++++++++------------------ lib/TaskMan.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ 19 files changed, 119 insertions(+), 71 deletions(-) diff --git a/include/Action.h b/include/Action.h index 5fcf660..185cd1a 100644 --- a/include/Action.h +++ b/include/Action.h @@ -2,9 +2,9 @@ #define __ACTION_H__ #ifdef __cplusplus -#include "Handle.h" -#include "Variables.h" -#include "Exceptions.h" +#include +#include +#include /* * La classe Action defini les actions HTTP possibles. diff --git a/include/Confirm.h b/include/Confirm.h index 704bb88..efd0606 100644 --- a/include/Confirm.h +++ b/include/Confirm.h @@ -2,9 +2,9 @@ #define __CONFIRM_H__ #ifdef __cplusplus -#include "Action.h" -#include "String.h" -#include "Exceptions.h" +#include +#include +#include /* * Cette classe sert à afficher une boîte de dialogue de confirmation. diff --git a/include/Form.h b/include/Form.h index e0bf75d..50b7e3c 100644 --- a/include/Form.h +++ b/include/Form.h @@ -2,9 +2,9 @@ #define __FORM_H__ #ifdef __cplusplus -#include "Action.h" -#include "String.h" -#include "Exceptions.h" +#include +#include +#include /* * Cette classe sert à afficher un formulaire de saisie. diff --git a/include/Handle.h b/include/Handle.h index 6d44a48..19de77a 100644 --- a/include/Handle.h +++ b/include/Handle.h @@ -4,8 +4,8 @@ #include #include -#include "String.h" -#include "Exceptions.h" +#include +#include /* * Pour les classes qui vont deriver: le constructeur Handle(int) specifie diff --git a/include/HttpServ.h b/include/HttpServ.h index 6bd2769..5074639 100644 --- a/include/HttpServ.h +++ b/include/HttpServ.h @@ -2,11 +2,11 @@ #define __HTTPSERV_H__ #ifdef __cplusplus -#include "Socket.h" -#include "String.h" -#include "Variables.h" -#include "Action.h" -#include "Exceptions.h" +#include +#include +#include +#include +#include /* * La classe HttpServ. Le constructueur (int, const String &) indique le port diff --git a/include/IRC.h b/include/IRC.h index 7c7e32c..f8db55b 100644 --- a/include/IRC.h +++ b/include/IRC.h @@ -2,8 +2,8 @@ #define __IRC_H__ #ifdef __cplusplus -#include "Socket.h" -#include "Exceptions.h" +#include +#include #define RPL_WELCOME 1 #define RPL_YOURHOST 2 diff --git a/include/Input.h b/include/Input.h index 1beb1b5..f9a3df5 100644 --- a/include/Input.h +++ b/include/Input.h @@ -2,8 +2,8 @@ #define __INPUT_H__ #ifdef __cplusplus -#include "String.h" -#include "Handle.h" +#include +#include /* * Cette classe sert à créer un fichier ouvert en lecture. diff --git a/include/Menu.h b/include/Menu.h index 7ea7662..4167656 100644 --- a/include/Menu.h +++ b/include/Menu.h @@ -2,9 +2,9 @@ #define __MENU_H__ #ifdef __cplusplus -#include "Action.h" -#include "String.h" -#include "Exceptions.h" +#include +#include +#include /* * Cette classe permet d'afficher un menu. diff --git a/include/Message.h b/include/Message.h index 888d0be..96b9aa4 100644 --- a/include/Message.h +++ b/include/Message.h @@ -2,9 +2,9 @@ #define __MESSAGE_H__ #ifdef __cplusplus -#include "Action.h" -#include "String.h" -#include "Exceptions.h" +#include +#include +#include /* * Cette classe sert a afficher un message. diff --git a/include/Output.h b/include/Output.h index 98af0ac..ef76012 100644 --- a/include/Output.h +++ b/include/Output.h @@ -2,8 +2,8 @@ #define __OUTPUT_H__ #ifdef __cplusplus -#include "String.h" -#include "Handle.h" +#include +#include /* * Ouvre un fichier en ecriture. diff --git a/include/ReadJob.h b/include/ReadJob.h index be846fb..4822390 100644 --- a/include/ReadJob.h +++ b/include/ReadJob.h @@ -4,7 +4,7 @@ #include #include -#include +#include class ReadJob : public Task { public: diff --git a/include/Socket.h b/include/Socket.h index 80c7180..9d70205 100644 --- a/include/Socket.h +++ b/include/Socket.h @@ -2,11 +2,11 @@ #define __SOCKET_H__ #ifdef __cplusplus -#include "Handle.h" -#include "String.h" -#include "Output.h" -#include "Input.h" -#include "Exceptions.h" +#include +#include +#include +#include +#include /* * Cree un socket. diff --git a/include/String.h b/include/String.h index 463abfc..c6afdb2 100644 --- a/include/String.h +++ b/include/String.h @@ -4,7 +4,7 @@ #include #include -#include "Exceptions.h" +#include /* * Cette classe permet de stocker des chaînes de caractères simplement. diff --git a/include/Table.h b/include/Table.h index c80fc8a..64cf249 100644 --- a/include/Table.h +++ b/include/Table.h @@ -2,9 +2,9 @@ #define __TABLE_H__ #ifdef __cplusplus -#include "Action.h" -#include "String.h" -#include "Exceptions.h" +#include +#include +#include /* * Affiche une table. diff --git a/include/Task.h b/include/Task.h index 456f8f3..f728e62 100644 --- a/include/Task.h +++ b/include/Task.h @@ -2,7 +2,9 @@ #define __TASK_H__ #ifdef __cplusplus -#include "Exceptions.h" +#include +#include +#include #define TASK_ON_HOLD 0 #define TASK_DONE 1 @@ -14,14 +16,21 @@ class Task : public Base { virtual String GetName(); int Run(); int GetState(); - int Suspend() throw (GeneralException); - void Resume(int) throw (GeneralException); + void Suspend() throw (GeneralException); + bool WaitFor(Handle *); + bool WaitFor(Task *); + bool WaitFor(pid_t); + bool WaitFor(struct timeval); protected: virtual int Do(); private: int state; bool suspended; + vector w4ha; + vector w4ta; + vector w4pr; + vector w4to; }; #else diff --git a/include/TaskMan.h b/include/TaskMan.h index 1efff93..03797af 100644 --- a/include/TaskMan.h +++ b/include/TaskMan.h @@ -8,12 +8,12 @@ class TaskMan : public Base { public: TaskMan() throw (GeneralException); - ~TaskMan(); int AddTask(Task *); - void MainLoop(); + void MainLoop() throw (GeneralException); private: vector TaskList; - static bool Inited; + int number; + static bool inited; }; #else diff --git a/include/Variables.h b/include/Variables.h index bbd2916..c4d6ba3 100644 --- a/include/Variables.h +++ b/include/Variables.h @@ -3,9 +3,9 @@ #ifdef __cplusplus #include -#include "String.h" -#include "Handle.h" -#include "Exceptions.h" +#include +#include +#include /* * Cette classe nous sert a gérer les variables transportées par les formulaires. diff --git a/lib/Task.cc b/lib/Task.cc index c34d0e3..2db8ce5 100644 --- a/lib/Task.cc +++ b/lib/Task.cc @@ -37,26 +37,24 @@ String Task::GetName() { return "Unknow Task"; } -int Task::Suspend() throw (GeneralException) { - int r; - +void Task::Suspend() throw (GeneralException) { cerr << "Suspending task " << GetName() << "...\n"; - suspended = true; - - r = setjmp(env); - - if (!r) throw TaskSwitch(); - - return r; + throw TaskSwitch(); } -void Task::Resume(int val) throw (GeneralException) { - cerr << "Resuming task " << GetName() << "...\n"; - if (suspended) { - suspended = false; - longjmp(env, val); - } else { - throw GeneralException(String("Task ") + GetName() + " was not suspended."); - } +void WaitFor(Handle * h) { + w4ha.push_back(h); +} + +void WaitFor(Task * t) { + w4ta.push_back(t); +} + +void WaitFor(pid_t p) { + w4pr.push_back(p); +} + +void WaitFor(struct timeval t) { + w4to.push_back(t); } diff --git a/lib/TaskMan.cc b/lib/TaskMan.cc index f8ba303..9abffb1 100644 --- a/lib/TaskMan.cc +++ b/lib/TaskMan.cc @@ -1,18 +1,59 @@ -#include +#include +#include "TaskMan.h" -bool TaskMan::Inited = false; +bool TaskMan::inited = false; + +static got_sigchild = 0; + +void taskman_sigchild(int sig) { + got_sigchild = 1; + signal(SIGCHILD, taskman_sigchild); +} TaskMan::TaskMan() throw (GeneralException) { - if (Inited) { - throw GeneralException("Another Task Manager is already running, aborting."); + throw GeneralException("You can't instanciate a Task Manager."); +} + +void TaskMan::Init() throw (GeneralException) { + if (inited) { + throw GeneralException("Task Manager already initialised."); } - Inited = true; + signal(SIGCHILD, taskman_sigchild); + + inited = true; + number = 0; } int TaskMan::AddTask(Task * t) { + TaskList.push_back(t); + number++; + + return 0; +} + +int TaskMan::RemoveTask(Task * t) { + int i; + for (i = 0; i < number; i++) { + if (TaskList[i] == t) { + TaskList.erase(i); + number--; + return 0; + } + } + return -1; } -void TaskMan::MainLoop() { +void TaskMan::MainLoop() throw (GeneralException) { + while (1) { + if (number == 0) { + throw GeneralException("TaskMan: No more task to manage."); + } + +#ifdef HAVE_POLL + +#else +#endif + } } -- cgit v1.2.3