Rezervační systém
Veřejné metody | Seznam všech členů
Dokumentace třídy CClientQuery

převod databázového dotazu do binární podoby ...

#include <ClientQuery.h>

Diagram dědičnosti pro třídu CClientQuery
CQuery

Veřejné metody

 CClientQuery (CClientConnection *cConnection)
 konstruktor ...
 
virtual ~CClientQuery ()
 destruktor
 
virtual unsigned AddCity (const char *pszName)
 přidání města ...
 
virtual bool AddCityAlias (const char *pszName, unsigned uiId)
 přidání zkratky k nějakému existujícímu městu ...
 
virtual bool DeleteCity (const char *pszName)
 smazání města podle jména ...
 
virtual unsigned FindCity (const char *pszName)
 nalezení města podle názvu ...
 
virtual bool CityInfo (unsigned uiCity, RCityInfo *prInfo, unsigned *puiLinesOut, unsigned *puiLinesIn)
 získání informací o městě ...
 
virtual unsigned AddBusPlan (const char *pszName, unsigned uiSeats, const CBlobEx< std::string > *cData)
 přidání plánu autobusu ...
 
virtual bool DeleteBusPlan (const char *pszName)
 smazání plánu autobusu ...
 
virtual unsigned FindBusPlan (const char *pszName)
 nalezení plánu autobusu ...
 
virtual bool BusPlanInfo (unsigned uiPlan, RPlanInfo *prInfo, unsigned *puiBuses, CBlobEx< std::string > *cData)
 získání informací o plánu ...
 
virtual unsigned AddBus (const RBusInfo *prBus)
 přidání autobusu ...
 
virtual bool DeleteBus (unsigned uiBus)
 smazání autobusu ...
 
virtual unsigned FindBus (unsigned uiFrom, unsigned uiTo, time_t tLeaveTime)
 nalezení autobusu ...
 
virtual bool BusInfo (unsigned uiBus, RBusInfo *prInfo, bool *pfEnabled, unsigned *puiSeats, std::list< unsigned > *cFreeSeats)
 získání informací o autobusu ...
 
virtual bool EnableBus (unsigned uiBus)
 povolení autobusu ...
 
virtual bool DisableBus (unsigned uiBus)
 zakázání autobusu ...
 
virtual unsigned NewCustomer (void)
 unikátní ID pro nového zákazníka ...
 
virtual bool AskSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer)
 dočasné zamluvení sedadel ...
 
virtual bool LockSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer)
 trvalá rezervace sedadel ...
 
virtual bool UnlockSeats (unsigned uiBus, std::list< unsigned > *cSeats, unsigned uiCustomer)
 zrušení rezervace sedadel ...
 
virtual unsigned NextBus (unsigned uiBus)
 nalezení dalšího autobusu v pořadí ...
 
virtual unsigned NextCity (unsigned uiCity)
 nalezení dalšího města v pořadí ...
 
virtual unsigned NextPlan (unsigned uiPlan)
 nalezení dalšího plánu v pořadí ...
 
virtual bool ListCity (const char *pszFrom, std::string *strName)
 nalezení dalšího města v abecedním pořadí ...
 
virtual bool ListAlias (const char *pszFrom, std::string *strAlias, std::string *strCity)
 nalezení dalšího aliasu města v abecedním pořadí ...
 
- Veřejné metody dědí se z CQuery
virtual ~CQuery ()=0
 destruktor ...
 

Detailní popis

převod databázového dotazu do binární podoby

Třída slouží jako zástupce databázového rozhraní CQuery na straně klienta. Implementuje všechny metody zmíněného rozhraní. Při jejich vyvolání však nekontaktuje databázi přímo, ale pomocí rozhraní CClientConnection je odesílá na server ke zpracování. Přebírá zpět návratové hodnoty a odevzdává je volajícímu.

Třída zabezpečuje převod všech volání do pole binárních dat třídy CCommand, které je následně pomocí meziprocesové komunikace odesláno na server. Po obdržení odpovědi nastává opačný proces - sestavení návratových hodnot z pole binárních dat. Je zřejmé, že kódování/dekódování dat musí probíhat konzistentně jak na straně klienta, tak na straně serveru, kde tuto činnost vykonává sesterská třída CServerQuery.

Třída CCommand kromě binárních dat přenáší i stavové slovo, které slouží ke kontrole komunikačního kanálu. Pokud dojde k nějakým problémům (např. nedostupný server), je takový chybový stav vyhodnocen a nadřízenému oznámen vyvoláním příslušné výjimky, která obsahuje i popis příčiny.

Problematikou meziprocesové komunikace se detailněji zabývá stránka Meziprocesová komunikace.

Dokumentace konstruktoru a destruktoru

CClientQuery::CClientQuery ( CClientConnection cConnection)

konstruktor

Vytvoření instance třídy s uložením ukazatele na rozhraní CClientConnection, které zajišťuje transport vytvořených zpráv (instancí CCommand) na server pomocí meziprocesové komunikace.

Parametry
[in]cConnectionukazatel na komunikační třídu

Dokumentace k metodám

virtual unsigned CClientQuery::AddBus ( const RBusInfo prBus)
virtual

přidání autobusu

Vytvoření autobusu s uvedenými daty a jeho přidání do databáze. Identifikační číslo (položka uiId struktury RBusInfo) nemusí být vyplněno, neboť dojde k jeho naplnění jedinečným číslem až při zpracování požadavku.

Parametry
[in]prBusstruktura RBusInfo s daty potřebnými k vytvoření nového autobusu,
Návratová hodnota
ID nově vloženého autobusu nebo 0 v případě chyby (snaha o zavedení duplicitního autobusu)

Implementuje CQuery.

virtual unsigned CClientQuery::AddBusPlan ( const char *  pszName,
unsigned  uiSeats,
const CBlobEx< std::string > *  cData 
)
virtual

přidání plánu autobusu

Parametry
[in]pszNamenázev plánu/typu autobusu
[in]uiSeatspočet sedadel
[in]cDatabinární data rozvržení sedadel
Návratová hodnota
unikátní číslo přidaného plánu nebo číslo již existujícího plány se zadaným jménem

Implementuje CQuery.

virtual unsigned CClientQuery::AddCity ( const char *  pszName)
virtual

přidání města

Parametry
[in]pszNamejméno města
Návratová hodnota
unikátní číslo nově přidaného města či číslo již dříve existujícího města

Implementuje CQuery.

virtual bool CClientQuery::AddCityAlias ( const char *  pszName,
unsigned  uiId 
)
virtual

přidání zkratky k nějakému existujícímu městu

Parametry
[in]pszNamenázev zkratky či dalšího názvu
[in]uiIdID existujícího města, se kterým chceme propojit tuto zkratku
Návratová hodnota
úspěch operace - false v případě, že jméno již existuje (jako město či alias) nebo pokud město s ID není v databázi

Implementuje CQuery.

virtual bool CClientQuery::AskSeats ( unsigned  uiBus,
std::list< unsigned > *  cSeats,
unsigned  uiCustomer 
)
virtual

dočasné zamluvení sedadel

Dočasné zamluvení sedadel, které po určitém čase vyprší.

Parametry
[in]uiBusID autobusu
[in,out]cSeatsseznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu
[in]uiCustomerID zákazníka
Návratová hodnota
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla

Implementuje CQuery.

virtual bool CClientQuery::BusInfo ( unsigned  uiBus,
RBusInfo prInfo,
bool *  pfEnabled,
unsigned *  puiSeats,
std::list< unsigned > *  cFreeSeats 
)
virtual

získání informací o autobusu

Parametry
[in]uiBusID autobusu
[out]prInfostruktura RBusInfo, která bude naplněná daty
[out]pfEnabledpřepínač, zda jsou povoleny změny v autobusu
[out]puiSeatspočet sedadel autobusu
[out]cFreeSeatsseznam volných sedadel
Návratová hodnota
úspěch operace - false, nebyl-li autobus nalezen
Poznámka
Výstupní parametry mohou být i NULL.

Implementuje CQuery.

virtual bool CClientQuery::BusPlanInfo ( unsigned  uiPlan,
RPlanInfo prInfo,
unsigned *  puiBuses,
CBlobEx< std::string > *  cData 
)
virtual

získání informací o plánu

Parametry
[in]uiPlanID plánu autobusu
[out]prInfostruktura RPlanInfo naplněná daty
[out]puiBusespočet autobusů využívajících tento plán
[out]cDatabinární data s rozložením sedadel
Návratová hodnota
úspěch operace - false, pokud plán nebyl nalezen
Poznámka
Výstupní parametry mohou být i NULL.

Implementuje CQuery.

virtual bool CClientQuery::CityInfo ( unsigned  uiCity,
RCityInfo prInfo,
unsigned *  puiLinesOut,
unsigned *  puiLinesIn 
)
virtual

získání informací o městě

Parametry
[in]uiCityID města
[out]prInfostruktura RCityInfo k vyplnění daty
[out]puiLinesOutpočet autobusů odjíždějících z tohoto města
[out]puiLinesInpočet autobusů přijíždějících do tohoto města
Návratová hodnota
úspěch operace - false, pokud město nebylo nalezeno
Poznámka
Výstupní parametry mohou být i NULL.

Implementuje CQuery.

virtual bool CClientQuery::DeleteBus ( unsigned  uiBus)
virtual

smazání autobusu

Parametry
[in]uiBusID autobusu určeného ke smazání
Návratová hodnota
úspěch operace

Implementuje CQuery.

virtual bool CClientQuery::DeleteBusPlan ( const char *  pszName)
virtual

smazání plánu autobusu

Vymazání plánu autobusu z kontajneru, může být provedeno pouze v případě, že neexistuje žádný autobus s tímto plánem.

Parametry
[in]pszNamenázev plánu autobusu
Návratová hodnota
úspěch operace

Implementuje CQuery.

virtual bool CClientQuery::DeleteCity ( const char *  pszName)
virtual

smazání města podle jména

Provede smazání města z kontajneru a zároveň vymazání všech případných aliasů názvu města.

Parametry
[in]pszNamenázev či alias města
Návratová hodnota
úspěch operace - false v případě, že město není v databázi nebo existují autobusové linky, které město používají

Implementuje CQuery.

virtual bool CClientQuery::DisableBus ( unsigned  uiBus)
virtual

zakázání autobusu

Zakáže provádět změny v rezervacích.

Parametry
[in]uiBusID autobusu
Návratová hodnota
úspěch operace - false, nebyl-li autobus nalezen

Implementuje CQuery.

virtual bool CClientQuery::EnableBus ( unsigned  uiBus)
virtual

povolení autobusu

Povolí provádět změny v rezervacích.

Parametry
[in]uiBusID autobusu
Návratová hodnota
úspěch operace - false, nebyl-li autobus nalezen

Implementuje CQuery.

virtual unsigned CClientQuery::FindBus ( unsigned  uiFrom,
unsigned  uiTo,
time_t  tLeaveTime 
)
virtual

nalezení autobusu

Funkce pro nalezení autobusu z města uiFrom do města uiTo a s časem odjezdu rovným nebo nejbližším větším času tLeaveTime.

Parametry
[in]uiFromID výchozího města
[in]uiToID cílového města
[in]tLeaveTimečas, od kterého hledáme shodu (tj. dolní hranice času odjezdu)
Návratová hodnota
ID nalezeného autobusu nebo 0

Implementuje CQuery.

virtual unsigned CClientQuery::FindBusPlan ( const char *  pszName)
virtual

nalezení plánu autobusu

Hledání plánu autobusu podle zadaného jména.

Parametry
[in]pszNamenázev plánu autobusu
Návratová hodnota
ID plánu, 0 v případě neúspěchu

Implementuje CQuery.

virtual unsigned CClientQuery::FindCity ( const char *  pszName)
virtual

nalezení města podle názvu

Hledání města probíhá nejprve v normálních názvech měst a v případě neúspěchu ve zkratkách (aliasech)

Parametry
[in]pszNamenázev či alias města
Návratová hodnota
ID nalezeného města nebo 0 v případě neúspěchu

Implementuje CQuery.

virtual bool CClientQuery::ListAlias ( const char *  pszFrom,
std::string *  strAlias,
std::string *  strCity 
)
virtual

nalezení dalšího aliasu města v abecedním pořadí

Najde další alias v abecedním pořadí.

Parametry
[in]pszFromalias, od kterého hledáme následující
[out]strAliasalias dalšího města v pořadí
[out]strCityjméno města odpovídající aliasu
Návratová hodnota
úspěch operace (false pro dosažení konce)

Implementuje CQuery.

virtual bool CClientQuery::ListCity ( const char *  pszFrom,
std::string *  strName 
)
virtual

nalezení dalšího města v abecedním pořadí

Najde další město v abecedním pořadí.

Parametry
[in]pszFromnázev města, od kterého hledáme následující
[out]strNamejméno dalšího města v pořadí
Návratová hodnota
úspěch operace (false pro dosažení konce)

Implementuje CQuery.

virtual bool CClientQuery::LockSeats ( unsigned  uiBus,
std::list< unsigned > *  cSeats,
unsigned  uiCustomer 
)
virtual

trvalá rezervace sedadel

Parametry
[in]uiBusID autobusu
[in,out]cSeatsseznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu
[in]uiCustomerID zákazníka
Návratová hodnota
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla

Implementuje CQuery.

virtual unsigned CClientQuery::NewCustomer ( void  )
virtual

unikátní ID pro nového zákazníka

Operace rezervace sedadel je vždy vázána na konkrétního zákazníka identifikovaného jedinečným číslem. Díky tomu pak může zákazník své rezervace dodatečně zrušit nebo potvrdit dočasnou rezervaci.

Návratová hodnota
unikátní číslo zákazníka

Implementuje CQuery.

virtual unsigned CClientQuery::NextBus ( unsigned  uiBus)
virtual

nalezení dalšího autobusu v pořadí

Najde další autobus podle ID.

Parametry
[in]uiBusID autobusu, od kterého hledáme následující
Návratová hodnota
ID nalezeného autobusu nebo 0

Pomocí této metody je možné sekvenčně procházet kontajner autobusů (zapouzdřený ve třídě CBuses). Odpovídající kousek kódu může vypadat např. následovně

unsigned uiId = 0;
while((uiId = cQuery->NextBus(uiId)) != 0) {
// zpracování autobusu s číslem uiId
}

Metodu můžeme využít např. v situaci, kdy potřebujeme zakázat rezervace ve všech autobusech, které odjíždějí během následující hodiny (abychom mohli předat řidičům konečný seznam rezervovaných sedadel).

Implementuje CQuery.

virtual unsigned CClientQuery::NextCity ( unsigned  uiCity)
virtual

nalezení dalšího města v pořadí

Najde další město podle ID.

Parametry
[in]uiCityID města, od kterého hledáme následující
Návratová hodnota
ID nalezeného města nebo 0

Implementuje CQuery.

virtual unsigned CClientQuery::NextPlan ( unsigned  uiPlan)
virtual

nalezení dalšího plánu v pořadí

Najde další plán podle ID.

Parametry
[in]uiPlanID plánu, od kterého hledáme následující
Návratová hodnota
ID nalezeného plánu nebo 0

Implementuje CQuery.

virtual bool CClientQuery::UnlockSeats ( unsigned  uiBus,
std::list< unsigned > *  cSeats,
unsigned  uiCustomer 
)
virtual

zrušení rezervace sedadel

Parametry
[in]uiBusID autobusu
[in,out]cSeatsseznam sedadel k uvolnění, neúspěšná sedadla budou smazána ze seznamu
[in]uiCustomerID zákazníka
Návratová hodnota
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla
Pozor
K úspěšnému zrušení rezervace je nutné mít zákaznické ID, se kterým byla provedena rezervace.

Implementuje CQuery.


Dokumentace pro tuto třídu byla generována z následujícího souboru: