#include #include #include #include #include "Handle.h" #include "Task.h" #include "TaskMan.h" #include "HttpServ.h" #include "Socket.h" #include "config.h" #include "Message.h" #include "Menu.h" #include "Exceptions.h" #include "Form.h" #include "Confirm.h" #include "Table.h" class InPipe : public Handle { public: InPipe(int in, int out) : Handle(in), m_out(out) { }; virtual ~InPipe() {} int GetOut(void) { return m_out; } virtual bool CanWrite(void) { return false; } virtual bool CanRead(void) { return true; } virtual String GetName(void) { return "Input pipe"; } private: int m_out; } * in; class ad_t : public Action { public: ad_t() : Action("menu6") { } virtual ~ad_t() { } virtual String GetTitle() { return "Action dynamique"; } virtual Task * Do(Variables * v, Handle * h) { String ut, un; if (!fork()) { execlp("uptime", "uptime", NULL); } (*in) >> ut; wait(NULL); if (!fork()) { execlp("uname", "uname", "-a", NULL); } (*in) >> un; wait(NULL); Action * m = new Message("Action dynamique", String("Vous avez choisi l'action dynamique. L'uptime de la machine est '") + ut + "' et sa définition complète est '" + un + "'", ""); Task * t = m->Do(v, h); delete m; return t; } }; Action * ad = new ad_t(); String Noms[] = {"Champ1", "Champ2", "Champ3"}; String Defaults[] = {"Default1", "Default2", 0}; String Invites[] = {"Champ 1:", "Champ 2:", "Champ 3:"}; String Options[] = {"Option1", "Option2", ""}; String ODescs[] = {"Description 1", "Description 2", ""}; String * Lists[] = {0, 0, Options}; String * Descs[] = {0, 0, ODescs}; String Titres[] = {"Titre 1", "Titre 2", "Titre 3"}; String Cells[] = {"L1C1", "L1C2", "L1C3", "L2C1", "L2C2", "L2C3", "L3C1", "L3C2", "L3C3", "L4C1", "L4C2", "L4C3"}; Action * a1 = new Message("Action 1", "Vous avez cliqué sur l'option 1 du menu", "menu1"); Action * a2 = new Table("Petite table", "menu2", Titres, Cells, 3, 4); Action * a3 = new Message("Schéma EA", "Voici le Schéma EA de cette application." "
", "schemaea"); Action * a4 = new Form("Test de formulaire...", "menu4", "Rentrez des trucs...", Noms, Invites, Defaults, Lists, Descs, 3); Action * a5 = new Confirm("Confirmation", "Oui ou non?", "menu5", 0, 0); Action * Liste[] = {a1, a2, a3, a4, a5, ad}; String Labels[] = {"Action 1", "Action 2", "Action 3", "Action 4", "Action 5", "Action dynamique"}; Action * buildmenu(void) { return new Menu("Menu Principal", "start", Labels, Liste, 6); } int main(int argc, char ** argv) { int p[2], c; String port = "1500"; list testlist; testlist.push_front("poide"); if (pipe(p)) { cerr << "Error creating pipe.\n"; exit(-1); } close(1); dup(p[1]); in = new InPipe(p[0], p[1]); String test = "poide\n", r; cout << test; cout.flush(); (*in) >> r; if (r != "poide") { cerr << "The stdout redirect has failed.\n"; exit(-1); } while ((c = getopt(argc, argv, "p:")) != EOF) { switch (c) { case 'p': port = optarg; break; default: cerr << "Usage: " << argv[0] << " [-p port]\n"; exit(-1); } } try { HttpServ h(buildmenu(), port.to_int()); TaskMan::MainLoop(); } catch (GeneralException e) { cerr << "Main function got an exception: '" << e.GetMsg() << "'.\n"; exit(-1); } catch (...) { cerr << "Unknow exception.\n" << endl; exit(-1); } delete in; exit(0); }