1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/c++/POSIXoveFronty/Fronta/fronta.cpp Tue Apr 07 23:49:02 2009 +0200
1.3 @@ -0,0 +1,66 @@
1.4 +#include <fronta.h>
1.5 +#include <iostream>
1.6 +
1.7 +using namespace std;
1.8 +
1.9 +Fronta::Fronta() {
1.10 + prijimaci = false;
1.11 + odesilaci = false;
1.12 + otevrena = false;
1.13 +}
1.14 +
1.15 +Fronta::Fronta(char* nazev, bool prijimaci, bool odesilaci) {
1.16 + this->nazev = nazev;
1.17 + this->prijimaci = prijimaci;
1.18 + this->odesilaci = odesilaci;
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 +
1.24 + /** Vytvoříme odesílací (obojetnou) nebo (pouze) čtecí frontu */
1.25 + if (odesilaci) {
1.26 + fronta = mq_open(nazev, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, &mq_vlastnosti);
1.27 + otevrena = true;
1.28 + } else if (prijimaci) {
1.29 + fronta = mq_open(nazev, O_RDONLY);
1.30 + otevrena = true;
1.31 + } else {
1.32 + otevrena = false;
1.33 + }
1.34 +}
1.35 +
1.36 +int Fronta::odesliZpravu(char* zprava) {
1.37 + if (otevrena && odesilaci) {
1.38 + return mq_send(fronta, zprava, strlen(zprava) + 1, 0);
1.39 + } else {
1.40 + return -1;
1.41 + }
1.42 +}
1.43 +
1.44 +char* Fronta::prijmiZpravu() {
1.45 + if (otevrena && prijimaci) {
1.46 + char zprava[DELKA_ZPRAVY + 1];
1.47 + zprava[DELKA_ZPRAVY] = '\0';
1.48 + if (mq_receive(fronta, zprava, DELKA_ZPRAVY, NULL) > 0) {
1.49 + return zprava;
1.50 + } else {
1.51 + return NULL;
1.52 + }
1.53 + } else {
1.54 + return NULL;
1.55 + }
1.56 +}
1.57 +
1.58 +void Fronta::zavriFrontu(bool zrusit) {
1.59 + if (otevrena) {
1.60 + if (zrusit) {
1.61 + mq_unlink(nazev);
1.62 + }
1.63 + mq_close(fronta);
1.64 + otevrena = false;
1.65 + }
1.66 +}
1.67 +
1.68 +
1.69 +