/** ******************************************************************************* @file /common/xml/package.h @brief Trida na prenaseni dat po siti @author Vta @version 1.0 ******************************************************************************/ // Pozn. kazda fce ktera ma v sobe vypustku musi mit jako posledni atribut NULL #ifndef _PACKAGE #define _PACKAGE #include #include #include #include "common/xml/xml.h" #include "common/exc.h" #include "common/Msg.h" #include "common/Interface.h" #include "common/Log.h" #include "common/types.h" /// Trida pro ulozeni dat pro prenos po siti class TPackage // CLSDBG1 { public: /** Konstruktor @param id_struct udava id struktury, ktera bude prenasena */ TPackage(int id_struct); /** Destruktor */ virtual ~TPackage(); /** @name Zapsani dat */ //@{ /** Nastavi data zadava v podobe retezce. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param data2 data k ulozeni @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu */ void setChar(const char * data2,const char * firsttag,int firstid,...); /** Nastavi data zadava v podobe cisla. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param data2 data k ulozeni @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu */ void setInt(int data2,const char * firsttag,int firstid,...); // nastavi data zadana v podobe cisla (pro uchovavani ve strukture budou prevedane na char) /** Nastavi data zadava v podobe realneho cisla. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param data2 data k ulozeni @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu */ void setDouble(double data2,char * firsttag,int firstid,...); // nastavi data zadana v podobe double (pro uchovavani ve strukture budou prevedane na char) /** Prevede list v XML strome (takovy ktery nema zadne subtagy) na uzel. Vhodne pro pozdejsi naplneni jeho subtagu v PackSmall. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu */ void setEmpty(const char * firsttag,int firstid,...); //@} /** @name Ziskani dat */ //@{ /** Ziska obsah tagu v podobe retezce. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param data2 pole k ziskani obsahu @param size velikost pole data2 @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu @return Vraci delku celeho obsahu, XML_ERROR_NO_SUCH_A_PATH pokud tag neexistuje */ int getChar(char * data2,int size, char * firsttag,int firstid,...); /// UKONCIT NULL pri pouzivani, ziska napr X("Zeme","Mesto","CR",NULL), /** Ziska cely obsah tagu v podobe retezce. V pripade nutnosti muze dojit k realokaci pole data2. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param data2 pole k ziskani obsahu @param size pocatecni velikost pole data2 @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu @return Vraci delku celeho obsahu, XML_ERROR_NO_SUCH_A_PATH pokud tag neexistuje */ int getCharR(char ** data2,int &size, char * firsttag,int firstid,...); /// UKONCIT NULL pri pouzivani, ziska napr X("Zeme","Mesto","CR",NULL), vraci delku celeho obsahu (kvuli size se to nemusi nakopirovat cele), -1 neexistujici tag, size je delka kolik je prave alokovana velikost data2, pokud by se neveslo, zvetsim... /** Ziska obsah tagu v podobe cisla. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param firsttag je prvni tag v ceste @param id je atribut id prvniho tagu @return Vraci obsah tagu prevedeny na cislo, XML_ERROR_NO_SUCH_A_PATH pokud tag neexistuje */ int getInt(const char * firsttag,int id,...); // vrati data prevedena na cislo /** Ziska obsah tagu v podobe realneho cisla. Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param firsttag je prvni tag v ceste @param id je atribut id prvniho tagu @return Vraci obsah tagu prevedeny na realne cislo, XML_ERROR_NO_SUCH_A_PATH pokud tag neexistuje */ double getDouble(char * firsttag,int id,...); // vrati data prevedena na double //@} /** @name Operace nad celym XML stromem */ //@{ /** Ziska odkaz na podstrom, ze ktereho lze pak vybudovat TPackSmall Posledni parametr musi byt NULL. Cesta je dana vzdy jmenem tagu a jeho indexem @param firsttag je prvni tag v ceste @param firstid je atribut id prvniho tagu @return Vraci ukazatel na tag, zadany cestou */ xmlcontainersmall * getSubtag(const char * firsttag,int firstid,...); /** Vraci XML data pro vlastni poslani pres sit */ TXMLdata * getXML(); /** Prenastavi odkaz na XML data */ void setXML(TXMLdata * data); //@} /** @name Prace se siti */ //@{ /** Posle zpravu se svymi daty k odeslani. @param from id objektu, ktery data posila @param to id objektu, ktery ma data obdrzet @param transceiver v pripade, ze chci adresovat primo nejaky transceiver */ void send(SENDER from,RECEIVER to,int transceiver=0); /** Zjisti od koho je zprava */ int msgFrom(); /** Zjisti pro koho je zprava */ int msgTo(); /** Zjisti od koho byla zprava puvodne poslana. Z duvodu, ze komnikace mezi klienty probiha pres server, je odesilatelem kazde zpravy pro klienta server. Zde se ulozi hodnota, kdo zpravu vytvoril */ int msgOrigFrom(); /** Nastavi from na orig_from. Vola se pred tim, nez sitova vrstva preda dorucenou zpravu */ void setOrigSender(); /** Zjisti na jaky transceiver je zprava adresovana */ int getTransceiver(); //@} protected: /** Pomocna metoda na nacteni parametru u metod s libovolnym poctem parametru. @param marker odkaz na parametry @param tags ukazatel na pole retezcu ziskanych z parametru @param ids ukazatel na pole indexu @param firstag jmeno prvniho tagu @param firstid id prvniho tagu @return Delka cesty */ int readAttrib(va_list marker,char ***tags,int **ids,const char * firsttag,int firstid); // nacte vsechny parametry do pole /** Vlastni XML data */ TXMLdata * data; /** Typ struktury (1-Package,2-PackSmall) */ int type; }; #endif // DEFINE _PACKAGE /*****************************************************************************/