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