libevent: identifikace serverových soketů a jednotlivých spojení (pomocí čísel FD)
2 * Program POSIXové Fronty
3 * @autor František Kučera <franta-hg@frantovo.cz>
9 #include <readline/readline.h>
18 * Spuštění programu „POSIXovéFronty“
22 cout << "Vítejte v programu POSIXovéFronty" << endl;
24 /** Nastavíme reakci na signál SIGTERM */
25 signal(SIGTERM, zpracujSignal);
26 signal(SIGINT, zpracujSignal);
27 signal(SIGHUP, zpracujSignal);
29 /** TODO: zeptat se na název fronty – readline */
30 //strcpy(nazevFronty, VYCHOZI_NAZEV_FRONTY);
31 nazevFronty = "/mojeFronta";
33 /** Program pracuje buď v režimu přijímání nebo odesílání */
34 if (isOdesilaciRezim()) {
40 /** Sem se nedostaneme, pokud metody poběží v cyklu – program končí, až když dostane patřičný signál. */
41 fronta.zavriFrontu(false);
42 return (EXIT_SUCCESS);
45 bool isOdesilaciRezim() {
47 cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl;
49 char odpoved = cin.get();
54 } else if (odpoved == 'p') {
57 return isOdesilaciRezim();
62 cout << "Odesíláme…" << endl;
63 fronta = Fronta(nazevFronty, false, true);
66 /** TODO: načítat pomocí readline */
68 cout << "Zadejte zprávu: \033[22;32m"; // zelená
69 cin.getline(zprava, 100);
72 /** TODO: ošetřit ctrl+d (zacyklení) */
73 if (fronta.odesliZpravu(zprava) == 0) {
74 cout << "Zpráva odeslána." << endl;
76 cout << "Při odesílání zprávy došlo k chybě." << endl;
82 cout << "Přijímáme…" << endl;
83 fronta = Fronta(nazevFronty, true, false);
86 char* zprava = fronta.prijmiZpravu();
89 cout << "Nepodařilo se přijmout zprávu." << endl;
91 printf("Přijatá zpráva: \033[22;32m%s\033[0m\n", zprava); // zelená
96 void zpracujSignal(int signal) {
97 if (signal == SIGTERM || signal == SIGINT || signal == SIGHUP) {
98 fronta.zavriFrontu(false);
99 cout << endl << "\033[22;31m" << "Končím program na základě signálu " << signal << "." << "\033[0m" << endl; // červená