c++/POSIXoveFronty/Fronta/program.cpp
author František Kučera <franta-hg@frantovo.cz>
Tue, 07 Apr 2009 01:16:04 +0200
changeset 6 617fef4676b9
parent 5 a6822e6dd2ca
child 7 cd5d8916d983
permissions -rw-r--r--
OOP: obalující třída pro práci s frontou
     1 /**
     2  * Program POSIXové Fronty
     3  * @autor František Kučera <franta-hg@frantovo.cz>
     4  */
     5 
     6 #include <program.h>
     7 #include <stdlib.h>
     8 #include <iostream>
     9 #include <readline/readline.h>
    10 #include <signal.h>
    11 #include <strings.h>
    12 
    13 #include "fronta.h"
    14 
    15 using namespace std;
    16 
    17 /**
    18  * Spuštění programu „POSIXovéFronty“
    19  */
    20 int main() {
    21 
    22     cout << "Vítejte v programu POSIXovéFronty" << endl;
    23 
    24     /** Nastavíme reakci na signál SIGTERM */
    25     signal(SIGTERM, zpracujSignal);
    26     signal(SIGINT, zpracujSignal);
    27 
    28     /** TODO: zeptat se na název fronty */
    29     //strcpy(nazevFronty, VYCHOZI_NAZEV_FRONTY);
    30     nazevFronty = "/mojeFronta";
    31 
    32     /** Program pracuje buď v režimu přijímání nebo odesílání */
    33     if (isOdesilaciRezim()) {
    34         odesilej();
    35     } else {
    36         prijimej();
    37     }
    38 
    39     fronta.zavriFrontu(false);
    40 
    41     /** Sem se nedostaneme, pokud metody poběží v cyklu – program končí, až když dostane patřičný signál. */
    42     return (EXIT_SUCCESS);
    43 }
    44 
    45 bool isOdesilaciRezim() {
    46 
    47     cout << "Zvolte režim: (p)řijímací / (o)desílací" << endl;
    48 
    49     char odpoved = cin.get();
    50     cin.get();
    51 
    52     if (odpoved == 'o') {
    53         return true;
    54     } else if (odpoved == 'p') {
    55         return false;
    56     } else {
    57         return isOdesilaciRezim();
    58     }
    59 }
    60 
    61 void odesilej() {
    62     cout << "Odesíláme…" << endl;
    63     fronta = Fronta(nazevFronty, false, true);
    64 
    65     /** TODO: načíst ze standardního vstupu */
    66     char zprava[] = "zpráva";
    67 
    68     if (fronta.odesliZpravu(zprava) == 0) {
    69         cout << "Zpráva odeslána." << endl;
    70     } else {
    71         cout << "Při odesílání zprávy došlo k chybě." << endl;
    72     }
    73 }
    74 
    75 void prijimej() {
    76     cout << "Přijímáme…" << endl;
    77     fronta = Fronta(nazevFronty, true, false);
    78 
    79     char* zprava = fronta.prijmiZpravu();
    80 
    81     if (zprava == NULL) {
    82         cout << "Nepodařilo se přijmout zprávu." << endl;
    83     } else {
    84         printf("Přijatá zpráva: %s\n", zprava);
    85     }
    86 }
    87 
    88 void zpracujSignal(int signal) {
    89     if (signal == SIGTERM || signal == SIGINT) {
    90         cout << "Končím program na základě signálu " << signal << "." << endl;
    91         exit(1);
    92     }
    93 }
    94