#ifdef HAVE_CONFIG_H #include "config.h" #endif #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" #include "InPipe.h" #include "Image.h" #include "CopyJob.h" #include "IRC.h" #include "Main.h" InPipe * in; class ad_run : public Task { public: ad_run(Variables * av, Variables * ahds, Handle * ah) : v(*av), hds(*ahds), h(ah) { SetBurst(); } virtual ~ad_run() {} virtual String GetName() { return "Action dynamique"; } protected: virtual int Do() throw (GeneralException) { pid_t p; switch (current) { case 0: if (!(p = fork())) { execlp("uptime", "uptime", NULL); } current = 1; WaitFor(p); Suspend(TASK_ON_HOLD); case 1: (*in) >> ut; if (!(p = fork())) { execlp("uname", "uname", "-a", NULL); } current = 2; WaitFor(p); Suspend(TASK_ON_HOLD); case 2: (*in) >> un; for (int i = 0; i < hds.GetNb(); i++) { shds += hds[i] + "
\n"; } 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 + "'


Voici la liste des entêtes:

" + shds, ""); current = 3; WaitFor(m->Do(&v, &hds, h)); Suspend(TASK_ON_HOLD); case 3: delete m; testimg = new Image(100, 100); testimg->Prepare(); testoutput = new Output("TestImg.tga"); current = 4; WaitFor(new CopyJob(testimg, testoutput, -1, true, true)); Suspend(TASK_ON_HOLD); case 4: return TASK_DONE; } return TASK_DONE; } private: Variables v, hds; Handle * h; String ut, un, shds; Action * m; Image * testimg; Output * testoutput; }; class ad_t : public Action { public: ad_t() : Action("menu6") { } virtual ~ad_t() { } virtual String GetTitle() { return "Action dynamique"; } virtual Task * Do(Variables * v, Variables * hds, Handle * h) { return new ad_run(v, hds, h); } }; 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("Test d'image", "Voici un test d'affichage d'image:" "
", "menu3"); 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 * java = new Message("Applet JAVA", "
", "java"); Action * up = new Message("Test d'upload", "
Send this file:
", "upload"); Action * Liste[] = {a1, a2, a3, a4, a5, ad, java, up}; String Labels[] = {"Action 1", "Action 2", "Action 3", "Action 4", "Action 5", "Action dynamique", "Essai de java", "Test d'upload"}; CODE_BEGINS Action * buildmenu(void) { Action * m = new Menu("Menu Principal", "start", Labels, Liste, 8); return m; } int startup() { int c; String port = "1500"; std::list testlist; testlist.push_front("poide"); in = new InPipe(); in->Hook(); String test = "poide\n", r; std::cout << test; std::cout.flush(); (*in) >> r; if (r != "poide") { std::cerr << "The stdout redirect has failed.\n"; exit(-1); } while ((c = getopt(argc, argv, "p:")) != EOF) { switch (c) { case 'p': port = optarg; break; default: std::cerr << "Usage: " << argv[0] << " [-p port]\n"; exit(-1); } } try { HttpServ h(buildmenu(), port.to_int(), "testing"); // IRC i("botalacon"); // i.Connect(); // i.MainLoop(); TaskMan::MainLoop(); } catch (GeneralException e) { std::cerr << "Main function got an exception: '" << e.GetMsg() << "'.\n"; exit(-1); } catch (...) { std::cerr << "Unknow exception.\n" << std::endl; exit(-1); } delete in; return 0; } CODE_ENDS