c++/POSIXoveFronty/Fronta/program.cpp
changeset 6 617fef4676b9
parent 5 a6822e6dd2ca
child 7 cd5d8916d983
     1.1 --- a/c++/POSIXoveFronty/Fronta/program.cpp	Sun Apr 05 22:02:15 2009 +0200
     1.2 +++ b/c++/POSIXoveFronty/Fronta/program.cpp	Tue Apr 07 01:16:04 2009 +0200
     1.3 @@ -6,9 +6,11 @@
     1.4  #include <program.h>
     1.5  #include <stdlib.h>
     1.6  #include <iostream>
     1.7 -#include <mqueue.h>
     1.8  #include <readline/readline.h>
     1.9  #include <signal.h>
    1.10 +#include <strings.h>
    1.11 +
    1.12 +#include "fronta.h"
    1.13  
    1.14  using namespace std;
    1.15  
    1.16 @@ -23,9 +25,9 @@
    1.17      signal(SIGTERM, zpracujSignal);
    1.18      signal(SIGINT, zpracujSignal);
    1.19  
    1.20 -    /** Nastavíme vlastnosti fronty */
    1.21 -    mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE;
    1.22 -    mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY;
    1.23 +    /** TODO: zeptat se na název fronty */
    1.24 +    //strcpy(nazevFronty, VYCHOZI_NAZEV_FRONTY);
    1.25 +    nazevFronty = "/mojeFronta";
    1.26  
    1.27      /** Program pracuje buď v režimu přijímání nebo odesílání */
    1.28      if (isOdesilaciRezim()) {
    1.29 @@ -34,7 +36,9 @@
    1.30          prijimej();
    1.31      }
    1.32  
    1.33 -    /** Sem se nedostaneme – program končí, až když dostane patřičný signál. */
    1.34 +    fronta.zavriFrontu(false);
    1.35 +
    1.36 +    /** Sem se nedostaneme, pokud metody poběží v cyklu – program končí, až když dostane patřičný signál. */
    1.37      return (EXIT_SUCCESS);
    1.38  }
    1.39  
    1.40 @@ -56,34 +60,29 @@
    1.41  
    1.42  void odesilej() {
    1.43      cout << "Odesíláme…" << endl;
    1.44 +    fronta = Fronta(nazevFronty, false, true);
    1.45  
    1.46 -    mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti);
    1.47 -
    1.48 +    /** TODO: načíst ze standardního vstupu */
    1.49      char zprava[] = "zpráva";
    1.50  
    1.51 -    int vysledek = mq_send(fronta, zprava, strlen(zprava) + 1, 0);
    1.52 -    if (vysledek == 0) {
    1.53 +    if (fronta.odesliZpravu(zprava) == 0) {
    1.54          cout << "Zpráva odeslána." << endl;
    1.55      } else {
    1.56          cout << "Při odesílání zprávy došlo k chybě." << endl;
    1.57      }
    1.58 -
    1.59 -    mq_close(fronta);
    1.60  }
    1.61  
    1.62  void prijimej() {
    1.63      cout << "Přijímáme…" << endl;
    1.64 +    fronta = Fronta(nazevFronty, true, false);
    1.65  
    1.66 -    mqd_t fronta = mq_open(NAZEV_FRONTY, O_RDONLY);
    1.67 -    char s[DELKA_ZPRAVY + 1];
    1.68 -    s[DELKA_ZPRAVY] = '\0';
    1.69 -    if (mq_receive(fronta, s, DELKA_ZPRAVY, NULL) > 0) {
    1.70 -        printf("Přijatá zpráva: %s\n", s);
    1.71 +    char* zprava = fronta.prijmiZpravu();
    1.72 +
    1.73 +    if (zprava == NULL) {
    1.74 +        cout << "Nepodařilo se přijmout zprávu." << endl;
    1.75      } else {
    1.76 -        cout << "Nepodařilo se přijmout zprávu." << endl;
    1.77 +        printf("Přijatá zpráva: %s\n", zprava);
    1.78      }
    1.79 -
    1.80 -    mq_close(fronta);
    1.81  }
    1.82  
    1.83  void zpracujSignal(int signal) {