?? poruka.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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -