⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poruka.h

📁 load data from pc to hand held terminal and vice versa
💻 H
字号:
/*
    Klase za rad sa porukama.
    Na pocetku su izdvojene deklaracije svega sto je kasnije definisano.
*/
#ifndef PORUKA_H
#define PORUKA_H

#include <string>
#include <vector>       // template "vector"
#include <iterator>
#include "FormatPoruke.h"
using namespace std;

//******************************* Deklaracije << BEGIN >> *******************************
//      - kalse
class   KPoruka;
class   KOpisTPoruke;
class   KTransankcionaPoruka;
//      - tipovi
typedef vector<KTransankcionaPoruka>    TListaTransakcPoruka;
//      - konstante
const   string KOMANDA_POSALJI = "S";
const   string KOMANDA_PRIMI   = "P";
//******************************** Deklaracije << END >> ********************************

// Osnovna klasa poruke
class KPoruka {
public:
    // Konstruktori
    KPoruka( string cSadrzajPoruke, KFormatPoruke& formatPoruke );
    KPoruka( string cSadrzajPoruke, IDFormataPoruke formatID = FP_DEFAULT );
    KPoruka( IDFormataPoruke formatID = FP_DEFAULT ); // Default konstruktor

    // Vraca duzinu poruke
    int Duzina( void ) const;

    // Vraca sadrzaj poruke
    string Sadrzaj( void );

    // Vraca format poruke
    KFormatPoruke Format( void ) const;

    // Procedura postavlja sadrzaj poruke.
    void PostaviSadrzaj( string cNoviSadrzaj );

    // Vraca 'true' ako data komponenta poruke postoji u formatu.
    // ( ako komponenta postoji u formatu, ne znaci da postoji i u telu poruke )
    bool PostojiKomponenta( IDKomponentePoruke ID );

    // Vraca sadrzaj komponente poruke sa datim ID-om.
    string DajKomponentu( IDKomponentePoruke ID );

    // Postavlja vrednost date komponente poruke.
    // Vraca 'false' ako data komponenta nije predvidjena formatom poruke.
    bool PostaviKomponentu( IDKomponentePoruke ID, string cSadrzajKomponente );

    // Postavlja vrednost date komponente poruke na dati bajt ( kopira ga onoliko puta kolika je duzina komponente ).
    // Radi samo za komponente cija je duzina poznata ( > 0 ).
    // Vraca 'false' ako data komponenta nije predvidjena formatom poruke.
    bool PostaviKomponentu( IDKomponentePoruke ID, unsigned char cBajt );

    // Brise datu komponentu poruke.
    // Vraca 'false' ako data komponenta nije predvidjena formatom poruke.
    bool ObrisiKomponentu( IDKomponentePoruke ID = KP_SADRZAJ );

    // Sracunava 'checksum' poruke. 'Sumira' sve bajtove poruke sem komponente 'SUMA' ( ako postoji ).
    // Checksum vraca u obiku stringa tako da moze odmah da se ubaci u poruku.
    string IzracunajSumu( void );

    // Proverava sumu poruke. Vraca 'false' ako suma nije dobra ili ako ne postoji.
    bool ProveriSumu( void );

    // Postavlja vrednost komponente 'SUMA' tako da odgovara sadrzaju poruke 
    // ako komponenta 'SUMA' postoji u poruci.
    void PostaviSumu( void );

    // Pomocna procedura : ispisuje sadraj poruke po komponentama na standardni izlaz
    void IspisiPoruku( void );

protected:
    string          sadrzaj;
    KFormatPoruke   format;

private:
    // Postavlja pozicije i duzine komponenata poruke na 'default' vrednosti.
    // Ako je poruka kratka ( ne sadrzi sve komponente ), postavlja njihove pozicije i duzine na 0.
    void ResetujPozicijeKomponenata( void );

};

// Podaci koji karakterisu transakcionu poruku
class KOpisTPoruke{
public:
    // Konstruktori
    KOpisTPoruke( void ){};
    KOpisTPoruke( string cKomanda, unsigned int nDuzina, bool bKodiraj ):
            komandaTP(cKomanda), duzinaTP(nDuzina), kodirajSadrzaj(bKodiraj) {};

    string          komandaTP;
    unsigned int    duzinaTP;
    bool            kodirajSadrzaj;     // true ako treba kodirati komponentu KP_SADRZAJ
};

// Izvedena klasa poruka koje se koriste u 'transakcijama' ( pod transakcijom se podrazmeva grupa poruka koje
// treba da se posalju/prime u odredjenom redosledu ).
class KTransankcionaPoruka : public KPoruka {
public:
    // Konstruktor za formiranje transakcione poruke
    KTransankcionaPoruka( string cSadrzajPoruke, KOpisTPoruke opisTP, KFormatPoruke& formatPoruke );
    KTransankcionaPoruka( string cSadrzajPoruke, KOpisTPoruke opisTP, IDFormataPoruke formatID = FP_DEFAULT );

    // Konstruktor za formiranje 'prazne' poruke datog formata
    KTransankcionaPoruka( KOpisTPoruke opisTP, IDFormataPoruke formatID );

    // Konstruktor za formiranje poruke koja treba da se salje : zadaje se samo sadrzaj poruke i format.
    KTransankcionaPoruka( string cSadrzajPoruke, IDFormataPoruke formatID = FP_DEFAULT );

    // Konstruktor za formiranje poruke koja treba da se primi : zadaje se samo ocekivana duzina i format.
    KTransankcionaPoruka( unsigned int nDuzina, IDFormataPoruke formatID = FP_DEFAULT );

    // Default konstruktor
    KTransankcionaPoruka( void );

    // Vraca 'true' ako poruka treba da se posalje na serijski port
    bool PorukaZaSlanje( void ) const;

    // Vraca 'true' ako se ocekuje da poruka stigne sa serijskog porta
    bool PrijemnaPoruka( void ) const;

    // Postavlja poruku da bude za slanje
    void PostaviZaSlanje( void );

    // Postavlja poruku da bude prijemna
    void PostaviZaPrijem( void );

    // Vraca duzinu poruke koja treba da se primi sa serijskog porta.
    // ( nije isto kao 'Duzina()' u osnovnoj klasi, jer poruka tek treba da se primi, pa 'Duzina()' moze da vrati 0 )
    unsigned int DajDuzinuTP( void ) const;

    // Postavlja duzinu poruke koja se ocekuje sa serijskog porta.
    unsigned int PostaviDuzinuTP( unsigned int duz );

    // Ispituje da li se kodira/dekodira sadrzaj poruke ( komponenta poruke KP_SADRZAJ )
    bool SadrzajKodiran( void );

protected:
    KOpisTPoruke opisTPoruke;

private:
    // Pomocna procedura za konstruktore
    void KopirajPoruku( KPoruka* pPoruka );
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -