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@10
|
27 |
signal(SIGHUP, zpracujSignal);
|
franta-hg@4
|
28 |
|
franta-hg@8
|
29 |
/** TODO: zeptat se na název fronty – readline */
|
franta-hg@6
|
30 |
//strcpy(nazevFronty, VYCHOZI_NAZEV_FRONTY);
|
franta-hg@6
|
31 |
nazevFronty = "/mojeFronta";
|
franta-hg@1
|
32 |
|
franta-hg@5
|
33 |
/** Program pracuje buď v režimu přijímání nebo odesílání */
|
franta-hg@1
|
34 |
if (isOdesilaciRezim()) {
|
franta-hg@1
|
35 |
odesilej();
|
franta-hg@1
|
36 |
} else {
|
franta-hg@1
|
37 |
prijimej();
|
franta-hg@1
|
38 |
}
|
franta-hg@1
|
39 |
|
franta-hg@8
|
40 |
/** Sem se nedostaneme, pokud metody poběží v cyklu – program končí, až když dostane patřičný signál. */
|
franta-hg@6
|
41 |
fronta.zavriFrontu(false);
|
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@8
|
65 |
while (true) {
|
franta-hg@8
|
66 |
/** TODO: načítat pomocí readline */
|
franta-hg@8
|
67 |
char zprava[100];
|
franta-hg@10
|
68 |
cout << "Zadejte zprávu: \033[22;32m"; // zelená
|
franta-hg@8
|
69 |
cin.getline(zprava, 100);
|
franta-hg@8
|
70 |
cout << "\033[0m\n";
|
franta-hg@1
|
71 |
|
franta-hg@10
|
72 |
/** TODO: ošetřit ctrl+d (zacyklení) */
|
franta-hg@8
|
73 |
if (fronta.odesliZpravu(zprava) == 0) {
|
franta-hg@8
|
74 |
cout << "Zpráva odeslána." << endl;
|
franta-hg@8
|
75 |
} else {
|
franta-hg@8
|
76 |
cout << "Při odesílání zprávy došlo k chybě." << endl;
|
franta-hg@8
|
77 |
}
|
franta-hg@4
|
78 |
}
|
franta-hg@1
|
79 |
}
|
franta-hg@1
|
80 |
|
franta-hg@1
|
81 |
void prijimej() {
|
franta-hg@5
|
82 |
cout << "Přijímáme…" << endl;
|
franta-hg@6
|
83 |
fronta = Fronta(nazevFronty, true, false);
|
franta-hg@1
|
84 |
|
franta-hg@8
|
85 |
while (true) {
|
franta-hg@8
|
86 |
char* zprava = fronta.prijmiZpravu();
|
franta-hg@6
|
87 |
|
franta-hg@8
|
88 |
if (zprava == NULL) {
|
franta-hg@8
|
89 |
cout << "Nepodařilo se přijmout zprávu." << endl;
|
franta-hg@8
|
90 |
} else {
|
franta-hg@8
|
91 |
printf("Přijatá zpráva: \033[22;32m%s\033[0m\n", zprava); // zelená
|
franta-hg@8
|
92 |
}
|
franta-hg@1
|
93 |
}
|
franta-hg@4
|
94 |
}
|
franta-hg@1
|
95 |
|
franta-hg@4
|
96 |
void zpracujSignal(int signal) {
|
franta-hg@10
|
97 |
if (signal == SIGTERM || signal == SIGINT || signal == SIGHUP) {
|
franta-hg@8
|
98 |
fronta.zavriFrontu(false);
|
franta-hg@8
|
99 |
cout << endl << "\033[22;31m" << "Končím program na základě signálu " << signal << "." << "\033[0m" << endl; // červená
|
franta-hg@4
|
100 |
exit(1);
|
franta-hg@4
|
101 |
}
|
franta-hg@4
|
102 |
}
|
franta-hg@1
|
103 |
|