BRS#
|
Hlavní třída databáze. More...
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... | |
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).
Základní entity, se kterými databáze pracuje, jsou reprezentovány třídami:
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.
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.
stream | proud se zálohou. |
Definition at line 86 of file MemoryDB.cs.
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.
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.
Name | název plánu/typu autobusu. |
Seats | počet sedadel. |
Data | rozvržení sedadel. |
Implements IQuery.
Definition at line 246 of file MemoryDB.cs.
uint MemoryDb.AddCity | ( | string | Name | ) |
přidání města.
Name | jmé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.
Name | název zkratky či dalšího názvu. |
Id | ID 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ší.
Bus | ID autobusu. |
Seats | seznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu. |
Customer | ID 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.
stream | Vý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.
uiBus | ID autobusu. |
Info | struktura BusInfo, která bude naplněná daty. |
Enabled | přepínač, zda jsou povoleny změny v autobusu. |
Seats | počet sedadel autobusu. |
FreeSeats | seznam 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 | ||
) |
bool MemoryDb.CityInfo | ( | uint | City, |
out CityInfo | Info, | ||
out uint | LinesOut, | ||
out uint | LinesIn | ||
) |
získání informací o městě.
City | ID města. |
Info | struktura CityInfo vyplněná daty. |
LinesOut | počet autobusů odjíždějících z tohoto města. |
LinesIn | poč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.
Bus | ID 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.
Name | ná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.
Name | ná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.
Bus | ID 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.
Bus | ID 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.
From | ID výchozího města. |
To | ID 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.
Name | ná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)
Name | ná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.
Info | Ukazatel 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í.
From | alias, od kterého hledáme následující. |
Alias | alias dalšího města v pořadí. |
City | jmé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í.
From | název města, od kterého hledáme následující. |
Name | jmé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.
Bus | ID autobusu. |
Seats | seznam sedadel k rezervaci, neúspěšná sedadla budou smazána ze seznamu. |
Customer | ID 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.
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).
Bus | ID 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.
City | ID 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.
Plan | ID plánu, od kterého hledáme následující. |
Implements IQuery.
Definition at line 553 of file MemoryDB.cs.
|
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 |
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.
DataDir | cesta 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.
Bus | ID autobusu. |
Seats | seznam sedadel k uvolnění, neúspěšná sedadla budou smazána ze seznamu. |
Customer | ID zákazníka. |
Implements IQuery.
Definition at line 516 of file MemoryDB.cs.