/** ****************************************************************************** @file /net/queue.h @brief Trida fronty zprav @author Vta @version 1.0 ******************************************************************************/ #ifndef _QUEUE_ #define _QUEUE_ #include "common/Msg.h" #include "common/mm.h" #include "common/da.h" #include "common/priority.h" #include "common/exc.h" #include "net/mysocket.h" #include namespace net { #define QUEUE_RUNNING 0 ///< stav fronty signalizujici jeji beh pro TMessageQueue::end #define QUEUE_ENDING 1 ///< stav fronty signalizujici jeji ukonceni pro TMessageQueue::end /// Struktura udrzujici data jedne zpravy struct TMessageBody { char * data; ///< Vlasni data mysocket to; ///< Adresat struct TMessageBody * next; ///< Ukazatel na dalsi zpravu v seznamu int part_sent; ///< Jak velka cast byla poslana size_t len; ///< Velikost }; /** Fronta na odeslane zpravy */ class TMessageQueue { public: /** Destruktor */ TMessageQueue(); /** Konstruktor */ ~TMessageQueue(); /** Prida zpravu do fronty, vrati kolik zprav je pred prave pridanou */ int addMessage(char * data,mysocket to); /** Vrati prvni na odeslani */ TMessageBody * messageToSend(); /** Informace, ze (cast) prvni zprava ve fronte jiz odesla */ void messageWasSend(); /** Zda-li fronta prestava existovat (konec klienta/serveru) */ int isEnding(); /** Zada prikaz ke zruseni - nastaveni end, coz pak zjisti vlakno */ void shutdownQueue(); private: /** Pocet zprav cekajicich */ int num; /** Prvni zprava nna odelslani */ TMessageBody * first; /** Posledni zprava na odeslani, za niz se pripise dalsi */ TMessageBody * last; /** Zdali fronta konci svuj provoz */ int end; /** Zamkne mutex */ void lock(void); /** Odemke mutex */ void unlock(void); /** Zamek pri pristup k datum */ SDL_mutex *mutex; /** Buffer na kompresi */ DA * compressbuff; }; } #endif