franta-hg@6: #include franta-hg@6: #include franta-hg@6: franta-hg@6: using namespace std; franta-hg@6: franta-hg@6: Fronta::Fronta() { franta-hg@6: prijimaci = false; franta-hg@6: odesilaci = false; franta-hg@6: otevrena = false; franta-hg@6: } franta-hg@6: franta-hg@6: Fronta::Fronta(char* nazev, bool prijimaci, bool odesilaci) { franta-hg@6: this->nazev = nazev; franta-hg@6: this->prijimaci = prijimaci; franta-hg@6: this->odesilaci = odesilaci; franta-hg@6: franta-hg@6: /** Nastavíme vlastnosti fronty */ franta-hg@6: mq_vlastnosti.mq_maxmsg = POCET_ZPRAV_VE_FRONTE; franta-hg@6: mq_vlastnosti.mq_msgsize = DELKA_ZPRAVY; franta-hg@6: franta-hg@6: /** Vytvoříme odesílací (obojetnou) nebo (pouze) čtecí frontu */ franta-hg@6: if (odesilaci) { franta-hg@6: fronta = mq_open(nazev, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti); franta-hg@6: otevrena = true; franta-hg@6: } else if (prijimaci) { franta-hg@6: fronta = mq_open(nazev, O_RDONLY); franta-hg@6: otevrena = true; franta-hg@6: } else { franta-hg@6: otevrena = false; franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: int Fronta::odesliZpravu(char* zprava) { franta-hg@6: if (otevrena && odesilaci) { franta-hg@6: return mq_send(fronta, zprava, strlen(zprava) + 1, 0); franta-hg@6: } else { franta-hg@6: return -1; franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: char* Fronta::prijmiZpravu() { franta-hg@6: if (otevrena && prijimaci) { franta-hg@6: char zprava[DELKA_ZPRAVY + 1]; franta-hg@6: zprava[DELKA_ZPRAVY] = '\0'; franta-hg@6: if (mq_receive(fronta, zprava, DELKA_ZPRAVY, NULL) > 0) { franta-hg@6: return zprava; franta-hg@6: } else { franta-hg@6: return NULL; franta-hg@6: } franta-hg@6: } else { franta-hg@6: return NULL; franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: void Fronta::zavriFrontu(bool zrusit) { franta-hg@6: if (otevrena) { franta-hg@6: if (zrusit) { franta-hg@6: mq_unlink(nazev); franta-hg@6: } franta-hg@6: mq_close(fronta); franta-hg@6: otevrena = false; franta-hg@6: } franta-hg@6: } franta-hg@6: franta-hg@6: franta-hg@6: