franta-hg@5: /** franta-hg@5: * Program POSIXové Fronty franta-hg@5: * @autor František Kučera franta-hg@1: */ franta-hg@1: franta-hg@1: #include franta-hg@1: #include franta-hg@5: #include franta-hg@1: #include franta-hg@4: #include franta-hg@6: #include franta-hg@6: franta-hg@6: #include "fronta.h" franta-hg@1: franta-hg@1: using namespace std; franta-hg@1: franta-hg@4: /** franta-hg@4: * Spuštění programu „POSIXovéFronty“ franta-hg@4: */ franta-hg@2: int main() { franta-hg@1: franta-hg@1: cout << "Vítejte v programu POSIXovéFronty" << endl; franta-hg@1: franta-hg@5: /** Nastavíme reakci na signál SIGTERM */ franta-hg@4: signal(SIGTERM, zpracujSignal); franta-hg@5: signal(SIGINT, zpracujSignal); franta-hg@10: signal(SIGHUP, zpracujSignal); franta-hg@4: franta-hg@8: /** TODO: zeptat se na název fronty – readline */ franta-hg@6: //strcpy(nazevFronty, VYCHOZI_NAZEV_FRONTY); franta-hg@6: nazevFronty = "/mojeFronta"; franta-hg@1: franta-hg@5: /** Program pracuje buď v režimu přijímání nebo odesílání */ franta-hg@1: if (isOdesilaciRezim()) { franta-hg@1: odesilej(); franta-hg@1: } else { franta-hg@1: prijimej(); franta-hg@1: } franta-hg@1: franta-hg@8: /** Sem se nedostaneme, pokud metody poběží v cyklu – program končí, až když dostane patřičný signál. */ franta-hg@6: fronta.zavriFrontu(false); franta-hg@1: return (EXIT_SUCCESS); franta-hg@1: } franta-hg@1: franta-hg@1: bool isOdesilaciRezim() { franta-hg@1: franta-hg@1: cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl; franta-hg@1: franta-hg@1: char odpoved = cin.get(); franta-hg@1: cin.get(); franta-hg@1: franta-hg@1: if (odpoved == 'o') { franta-hg@1: return true; franta-hg@1: } else if (odpoved == 'p') { franta-hg@1: return false; franta-hg@1: } else { franta-hg@1: return isOdesilaciRezim(); franta-hg@1: } franta-hg@1: } franta-hg@1: franta-hg@1: void odesilej() { franta-hg@5: cout << "Odesíláme…" << endl; franta-hg@6: fronta = Fronta(nazevFronty, false, true); franta-hg@1: franta-hg@8: while (true) { franta-hg@8: /** TODO: načítat pomocí readline */ franta-hg@8: char zprava[100]; franta-hg@10: cout << "Zadejte zprávu: \033[22;32m"; // zelená franta-hg@8: cin.getline(zprava, 100); franta-hg@8: cout << "\033[0m\n"; franta-hg@1: franta-hg@10: /** TODO: ošetřit ctrl+d (zacyklení) */ franta-hg@8: if (fronta.odesliZpravu(zprava) == 0) { franta-hg@8: cout << "Zpráva odeslána." << endl; franta-hg@8: } else { franta-hg@8: cout << "Při odesílání zprávy došlo k chybě." << endl; franta-hg@8: } franta-hg@4: } franta-hg@1: } franta-hg@1: franta-hg@1: void prijimej() { franta-hg@5: cout << "Přijímáme…" << endl; franta-hg@6: fronta = Fronta(nazevFronty, true, false); franta-hg@1: franta-hg@8: while (true) { franta-hg@8: char* zprava = fronta.prijmiZpravu(); franta-hg@6: franta-hg@8: if (zprava == NULL) { franta-hg@8: cout << "Nepodařilo se přijmout zprávu." << endl; franta-hg@8: } else { franta-hg@8: printf("Přijatá zpráva: \033[22;32m%s\033[0m\n", zprava); // zelená franta-hg@8: } franta-hg@1: } franta-hg@4: } franta-hg@1: franta-hg@4: void zpracujSignal(int signal) { franta-hg@10: if (signal == SIGTERM || signal == SIGINT || signal == SIGHUP) { franta-hg@8: fronta.zavriFrontu(false); franta-hg@8: cout << endl << "\033[22;31m" << "Končím program na základě signálu " << signal << "." << "\033[0m" << endl; // červená franta-hg@4: exit(1); franta-hg@4: } franta-hg@4: } franta-hg@1: