BRS#
MemoryDb Class Reference

Hlavní třída databáze. More...

Inheritance diagram for MemoryDb:
IQuery IAdmin

Public Member Functions

 MemoryDb ()
 Výchozí konstruktor. More...
 
 MemoryDb (System.IO.Stream stream)
 Konstruktor obnovení ze zálohy. More...
 
uint AddCity (string Name)
 přidání města. More...
 
bool AddCityAlias (string Name, uint Id)
 přidání zkratky k nějakému existujícímu městu. More...
 
bool DeleteCity (string Name)
 smazání města podle jména. More...
 
uint FindCity (string Name)
 nalezení města podle názvu. More...
 
bool CityInfo (uint City, out CityInfo Info, out uint LinesOut, out uint LinesIn)
 získání informací o městě. More...
 
uint AddBusPlan (string Name, uint Seats, string Data)
 přidání plánu autobusu. More...
 
bool DeleteBusPlan (string Name)
 smazání plánu autobusu. More...
 
uint FindBusPlan (string Name)
 nalezení plánu autobusu. More...
 
bool BusPlanInfo (uint Plan, out PlanInfo Info, out uint Buses, out string Data)
 získání informací o plánu. More...
 
uint AddBus (BusInfo Bus)
 přidání autobusu. More...
 
bool DeleteBus (uint Bus)
 smazání autobusu. More...
 
uint FindBus (uint From, uint To, DateTime LeaveTime)
 nalezení autobusu. More...
 
bool BusInfo (uint Bus, out BusInfo Info, out bool Enabled, out uint Seats, out Queue< uint > FreeSeats)
 získání informací o autobusu. More...
 
bool EnableBus (uint Bus)
 povolení autobusu. More...
 
bool DisableBus (uint Bus)
 zakázání autobusu. More...
 
uint NewCustomer ()
 unikátní ID pro nového zákazníka. More...
 
bool AskSeats (uint Bus, ref Queue< uint > Seats, uint Customer)
 dočasné zamluvení sedadel. More...
 
bool LockSeats (uint Bus, ref Queue< uint > Seats, uint Customer)
 trvalá rezervace sedadel. More...
 
bool UnlockSeats (uint Bus, ref Queue< uint > Seats, uint Customer)
 zrušení rezervace sedadel. More...
 
uint NextBus (uint Bus)
 nalezení dalšího autobusu v pořadí. More...
 
uint NextCity (uint City)
 nalezení dalšího města v pořadí. More...
 
uint NextPlan (uint Plan)
 nalezení dalšího plánu v pořadí. More...
 
bool ListCity (string From, out string Name)
 nalezení dalšího města v abecedním pořadí. More...
 
bool ListAlias (string From, out string Alias, out string City)
 nalezení dalšího aliasu města v abecedním pořadí. More...
 
bool Backup (System.IO.Stream stream)
 Vytvoří zálohu do zadaného výstupního proudu. More...
 
bool Info (out DbInfo Info)
 Vrátí informace o databázi. More...
 
virtual void OnStart ()
 Akce při spuštění serveru. More...
 
virtual void OnStop ()
 Akce při zastavení serveru. More...
 
void SetDataDir (string DataDir)
 Adresář pro datové soubory. More...
 

Detailed Description

Hlavní třída databáze.

Třída obsahuje metody pro práci s autobusy, městy a plány autobusů. Implementuje rozhraní IQuery pro klientská volání a IAdmin pro správu a zapouzdřuje tak veškeré operace s databází. Třída vlastně obsahuje jak vlastní databázový stroj, tak zajišťuje uložení dat pomocí kontajnerů C5 (tedy přímo v operační paměti počítače) - viz Serverová aplikace. Kromě vlastních datových kontajnerů pro města, plány a autobusy implementuje i pomocné kontajnery (indexy) pro rychlé vyhledávání podle různých kritérií. Pro snazší vyhledávání měst podporuje i jejich pomocná jména (aliasy).

Db.png
Databáze z pohledu jejího uživatele a správce

Základní entity, se kterými databáze pracuje, jsou reprezentovány třídami:

  • City - město jako počáteční a koncová stanice autobusové linky,
  • Plan - typ autobusu, tj. počet sedadel pro cestující a jejich rozmístění,
  • Seat - sedadlo v autobuse a stav jeho rezervace,
  • Bus - autobus, který sdružuje kolekci sedadel. Počet sedadel v konkrétním autobusu je dán jeho plánem a v průběhu životnosti je pevně daný, přístup k jednotlivým sedadlům je pomocí indexu, pro uložení je zvolen List<Seat>. Ostatní třídy jsou uloženy ve stromové struktuře, která zaručuje rychlé vyhledávání. Použitým kontajnerem je TreeDictionary (např. tedy TreeDictionary<string, City>), setřídění je podle unikátního čísla. Pro vyhledávání podle dodatečných kritérií (např. města dle názvu nebo autobusu dle koncových měst a času odjezdu) jsou součástí databáze příslušné indexy, také kontajnery typu TreeDictionary, které jsou však setříděny podle požadovaného kritéria. Aliasy měst jsou implementovány jako TreeDictionary<string, uint>. Objekty City, Plan a Bus obecně nejsou po dobu svého života konstantní. Přesto mohou být bez problémů uloženy v asociativních kontajnerech, neboť položky použité pro uspořádání konstantní zůstávají (tyto jsou inicializovány v konstruktoru a následně již není možné je měnit). Předpokládá se, že k databázi může současně přistupovat více klientů najednou (tj. volání metod může probíhat současně z více vláken). Proto je implementace třídy vybavena zámky typu více čtení/jeden zápis, které na jedné straně zajišťují konzistenci dat, na druhé se snaží minimalizovat prostoje (podrobněji viz Zamykání položek databáze v operační paměti). Řešením otázky bezpečnosti uložení dat v operační paměti se podrobněji zabývá kapitola Otázka nepersitentní povahy databáze.

Definition at line 62 of file MemoryDB.cs.

Constructor & Destructor Documentation

MemoryDb.MemoryDb ( )

Výchozí konstruktor.

Vytvoření prázdné databáze, tj. inicializace všech součástí a vytvoření prázdných kontajnerů měst, jejich aliasů, plánů a autobusů včetně prázdných indexů.

Definition at line 68 of file MemoryDB.cs.

MemoryDb.MemoryDb ( System.IO.Stream  stream)

Konstruktor obnovení ze zálohy.

Databáze je vytvořena ve stavu, který odpovídá dříve provedené záloze (pomocí metody MemoryDb.Backup). Všechny indexy jsou správně synchronizovány s vlastními datovými kontajnery.

Pokud při obnově ze zálohy dojde k nějaké chybě (nesprávný formát dat, chyba při čtení z proudu apod.) je vytvořena prázdná databáze.

Více viz Zálohování a obnova databáze.

Parameters
streamproud se zálohou.

Definition at line 86 of file MemoryDB.cs.

Member Function Documentation

uint MemoryDb.AddBus ( BusInfo  Bus)

přidání autobusu.

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

Returns
ID nově vloženého autobusu nebo 0 v případě chyby (snaha o zavedení duplicitního autobusu).
Parameters
Busstruktura BusInfo s daty potřebnými k vytvoření nového autobusu.

Implements IQuery.

Definition at line 314 of file MemoryDB.cs.

uint MemoryDb.AddBusPlan ( string  Name,
uint  Seats,
string  Data 
)

přidání plánu autobusu.

Returns
unikátní číslo přidaného plánu nebo číslo již existujícího plány se zadaným jménem.
Parameters
Namenázev plánu/typu autobusu.
Seatspočet sedadel.
Datarozvržení sedadel.

Implements IQuery.

Definition at line 246 of file MemoryDB.cs.

uint MemoryDb.AddCity ( string  Name)

přidání města.

Returns
unikátní číslo nově přidaného města či číslo jiz dříve existujícího města.
Parameters
Namejméno města.

Implements IQuery.

Definition at line 155 of file MemoryDB.cs.

bool MemoryDb.AddCityAlias ( string  Name,
uint  Id 
)

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

Returns
ú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.
Parameters
Namenázev zkratky či dalšího názvu.
IdID existujícího města, se kterým chceme propojit tuto zkratku.

Implements IQuery.

Definition at line 176 of file MemoryDB.cs.

bool MemoryDb.AskSeats ( uint  Bus,
ref Queue< uint >  Seats,
uint  Customer 
)

dočasné zamluvení sedadel.

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

Returns
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla.
Parameters
BusID autobusu.
Seatsseznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu.
CustomerID zákazníka.

Implements IQuery.

Definition at line 478 of file MemoryDB.cs.

bool MemoryDb.Backup ( System.IO.Stream  stream)

Vytvoří zálohu do zadaného výstupního proudu.

Returns
true v případě úspěchu, false jinak
Parameters
streamVýstupní proud pro zapsání dat.

Implements IAdmin.

Definition at line 597 of file MemoryDB.cs.

bool MemoryDb.BusInfo ( uint  uiBus,
out BusInfo  Info,
out bool  Enabled,
out uint  Seats,
out Queue< uint >  FreeSeats 
)

získání informací o autobusu.

Returns
úspěch operace - false, nebyl-li autobus nalezen.
Parameters
uiBusID autobusu.
Infostruktura BusInfo, která bude naplněná daty.
Enabledpřepínač, zda jsou povoleny změny v autobusu.
Seatspočet sedadel autobusu.
FreeSeatsseznam volných sedadel.

Implements IQuery.

Definition at line 398 of file MemoryDB.cs.

bool MemoryDb.BusPlanInfo ( uint  Plan,
out PlanInfo  Info,
out uint  Buses,
out string  Data 
)

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

Returns
úspěch operace - false, pokud plán nebyl nalezen.
Parameters
PlanID plánu autobusu.
Infostruktura PlanInfo k naplnění daty.
Busespočet autobusů využívajících tento plán.
Datadata s rozložením sedadel.

Implements IQuery.

Definition at line 304 of file MemoryDB.cs.

bool MemoryDb.CityInfo ( uint  City,
out CityInfo  Info,
out uint  LinesOut,
out uint  LinesIn 
)

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

Returns
úspěch operace - false, pokud město nebylo nalezeno.
Parameters
CityID města.
Infostruktura CityInfo vyplněná daty.
LinesOutpočet autobusů odjíždějících z tohoto města.
LinesInpočet autobusů přijíždějících do tohoto města.

Implements IQuery.

Definition at line 236 of file MemoryDB.cs.

bool MemoryDb.DeleteBus ( uint  Bus)

smazání autobusu.

Returns
úspěch operace.
Parameters
BusID autobusu určeného ke smazání.

Implements IQuery.

Definition at line 350 of file MemoryDB.cs.

bool MemoryDb.DeleteBusPlan ( string  Name)

smazání plánu autobusu.

Note
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.
Returns
úspěch operace.
Parameters
Namenázev plánu autobusu.

Implements IQuery.

Definition at line 267 of file MemoryDB.cs.

bool MemoryDb.DeleteCity ( string  Name)

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.

Returns
úspěch operace - false v případě, že město není v databázi nebo existují autobusové linky, které město používají.
Parameters
Namenázev či alias města.

Implements IQuery.

Definition at line 194 of file MemoryDB.cs.

bool MemoryDb.DisableBus ( uint  Bus)

zakázání autobusu.

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

Returns
úspěch operace - false, nebyl-li autobus nalezen.
Parameters
BusID autobusu.

Implements IQuery.

Definition at line 447 of file MemoryDB.cs.

bool MemoryDb.EnableBus ( uint  Bus)

povolení autobusu.

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

Returns
úspěch operace - false, nebyl-li autobus nalezen.
Parameters
BusID autobusu.

Implements IQuery.

Definition at line 427 of file MemoryDB.cs.

uint MemoryDb.FindBus ( uint  From,
uint  To,
DateTime  LeaveTime 
)

nalezení autobusu.

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

Returns
ID nalezeného autobusu nebo 0.
Parameters
FromID výchozího města.
ToID cílového města.
LeaveTimečas, od kterého hledáme shodu (tj. dolní hranice času odjezdu).

Implements IQuery.

Definition at line 388 of file MemoryDB.cs.

uint MemoryDb.FindBusPlan ( string  Name)

nalezení plánu autobusu.

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

Returns
ID plánu, 0 v případě neúspěchu.
Parameters
Namenázev plánu autobusu.

Implements IQuery.

Definition at line 294 of file MemoryDB.cs.

uint MemoryDb.FindCity ( string  Name)

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)

Returns
ID nalezeného města nebo 0 v případě neúspěchu.
Parameters
Namenázev či alias města.

Implements IQuery.

Definition at line 226 of file MemoryDB.cs.

bool MemoryDb.Info ( out DbInfo  Info)

Vrátí informace o databázi.

Returns
true v případě úspěchu, false jinak
Parameters
InfoUkazatel na strukturu DbInfo, kam bude vrácena tato struktura vyplněná daty.

Implements IAdmin.

Definition at line 603 of file MemoryDB.cs.

bool MemoryDb.ListAlias ( string  From,
out string  Alias,
out string  City 
)

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

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

Returns
úspěch operace (false pro dosažení konce).
Parameters
Fromalias, od kterého hledáme následující.
Aliasalias dalšího města v pořadí.
Cityjméno města odpovídající aliasu.

Implements IQuery.

Definition at line 577 of file MemoryDB.cs.

bool MemoryDb.ListCity ( string  From,
out string  Name 
)

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

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

Returns
úspěch operace (false pro dosažení konce).
Parameters
Fromnázev města, od kterého hledáme následující.
Namejméno dalšího města v pořadí.

Implements IQuery.

Definition at line 561 of file MemoryDB.cs.

bool MemoryDb.LockSeats ( uint  Bus,
ref Queue< uint >  Seats,
uint  Customer 
)

trvalá rezervace sedadel.

Returns
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla.
Parameters
BusID autobusu.
Seatsseznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu.
CustomerID zákazníka.

Implements IQuery.

Definition at line 495 of file MemoryDB.cs.

uint MemoryDb.NewCustomer ( )

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.

Returns
unikátní číslo zákazníka.

Implements IQuery.

Definition at line 467 of file MemoryDB.cs.

uint MemoryDb.NextBus ( uint  Bus)

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

Najde další autobus podle ID.

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

uint Id;
while((Id = query.NextBus(Id)) != 0) {
// zpracování autobusu s číslem Id
}

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).

Returns
ID nalezeného autobusu nebo 0.
Parameters
BusID autobusu, od kterého hledáme následující.

Implements IQuery.

Definition at line 537 of file MemoryDB.cs.

uint MemoryDb.NextCity ( uint  City)

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

Najde další město podle ID.

Returns
ID nalezeného města nebo 0.
Parameters
CityID města, od kterého hledáme následující.

Implements IQuery.

Definition at line 545 of file MemoryDB.cs.

uint MemoryDb.NextPlan ( uint  Plan)

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

Najde další plán podle ID.

Returns
ID nalezeného plánu nebo 0.
Parameters
PlanID plánu, od kterého hledáme následující.

Implements IQuery.

Definition at line 553 of file MemoryDB.cs.

virtual void MemoryDb.OnStart ( )
virtual

Akce při spuštění serveru.

Provádí inicializaci žurnálovacího mechanismu, který zajišťuje zachování dat i v případě neočekávaného pádu aplikace.

Definition at line 624 of file MemoryDB.cs.

virtual void MemoryDb.OnStop ( )
virtual

Akce při zastavení serveru.

Po zastavení komunikačních serverů se provede uložení paměťové databáze do perzistentní podoby (do diskového souboru). Tím je zajištěno uchování dat i po ukončení celého serveru.

Definition at line 634 of file MemoryDB.cs.

void MemoryDb.SetDataDir ( string  DataDir)

Adresář pro datové soubory.

Nastavení adresáře pro soubory s interní zálohou databáze a žurnálu.

Parameters
DataDircesta k adresáři - prázdný řetězec pro aktuální adresář, jinak absolutní nebo relativní cesta zakončená backslash na Windows nebo / na Unixových systémech.

Definition at line 647 of file MemoryDB.cs.

bool MemoryDb.UnlockSeats ( uint  Bus,
ref Queue< uint >  Seats,
uint  Customer 
)

zrušení rezervace sedadel.

Warning
K úspěšnému zrušení rezervace je nutné mít zákaznické ID, se kterým byla provedena rezervace.
Returns
úspěch operace - false, pokud autobus není nalezen nebo se operace nezdařila pro všechna sedadla.
Parameters
BusID autobusu.
Seatsseznam sedadel k uvolnění, neúspěšná sedadla budou smazána ze seznamu.
CustomerID zákazníka.

Implements IQuery.

Definition at line 516 of file MemoryDB.cs.


The documentation for this class was generated from the following file: