Rezervační systém
|
třída pro obsluhu přenosu zpráv mezi procesy ...
#include <MsgEndpoint.h>
Veřejné metody | |
CMsgEndpoint (const char *pszName, const char *pszClass) | |
konstruktor ... | |
~CMsgEndpoint () | |
destruktor ... | |
bool | Send (CMsgData *cMsg) |
odeslání dat ... | |
HANDLE | ReceivedEvent (void) const |
událost o dostupnosti dat ... | |
unsigned | Received (void) |
počet přijatých zpráv ... | |
bool | Get (CMsgData *cMsg) |
vyzvednutí dat ... | |
void | Enable (bool fYesNo) |
pozastavení/obnovení příjmu zpráv ... | |
void | ClearReceived (void) |
vyprázdnění kontajneru přijatých zpráv | |
třída pro obsluhu přenosu zpráv mezi procesy
Zprávy mezi procesy jsou přenášeny pomocí zprávy WM_COPYDATA operačního systému oběma směry. K tomu musí na přijímací straně existovat okno, které zprávu přijme a zpracuje, a vlákno, které zaručuje obsluhu ostatních zpráv zasílaných pomocí PostMessage
. Odesílání zpráv probíhá v blokujícím režimu (pomocí SendMessage
). Třída samotná neprovádí žádnou další manipulaci s přenášenými informacemi, to je úlohou vyšších vrstev.
Přijaté zprávy jsou uchovávány v interním kontajneru, do kterého se sekvenčně přidávají. Konzistence dat v kantajneru při souběžném přístupu z více vláken je zajištěna kritickou sekcí. Dostupnost dat je signalizována pomocí objektu jádra - události.
CMsgEndpoint::CMsgEndpoint | ( | const char * | pszName, |
const char * | pszClass | ||
) |
konstruktor
Konstruktor provádí vytvoření a spuštění pracovního vlákna, které zajišťuje:
WM_COPYDATA
(ostatní zprávy jsou předány standardní obsluze) [in] | pszName | jméno okna pro příjem zpráv Důležité na straně serveru pro nalezení příjemce zpráv od klienta. Pokud je NULL, použije se defaultní jméno. |
[in] | pszClass | jméno třídy okna, které je vytvořeno pro příjem zpráv Pro hodnotu NULL se použije defaultní třída. |
CMsgEndpoint::~CMsgEndpoint | ( | ) |
destruktor
Při destrukci objektu se provede zrušení okna, ukončení smyčky zpráv v pracovním vlákně (pomocí zprávy WM_QUIT
) a počká se na ukončení pracovního vlákna. Až poté následuje dealokace všech zdrojů.
void CMsgEndpoint::Enable | ( | bool | fYesNo | ) |
pozastavení/obnovení příjmu zpráv
Po spuštění pracovního vlákna a vytvoření okna je toto připraveno přijímat a zpracovávat zprávy WM_COPYDATA
. Toto lze dočasně pozastavit a později opět obnovit. V případě pozastaveného příjmu je návratová hodnota metody Send false. Jiných zpráv se pozastavení netýká, jsou zpracovávány normálně.
[in] | fYesNo | povolení (true) nebo pozastavení (ve false) příjmu zpráv |
bool CMsgEndpoint::Get | ( | CMsgData * | cMsg | ) |
vyzvednutí dat
Vyzvednutí první zprávy z datového kontajneru a předání do příslušné třídy.
[out] | cMsg | data přijaté zpravy, která se skládají z handle okna pro odpověď, stavového slova a vlastního pole binárních dat |
unsigned CMsgEndpoint::Received | ( | void | ) |
počet přijatých zpráv
HANDLE CMsgEndpoint::ReceivedEvent | ( | void | ) | const |
událost o dostupnosti dat
@return handle události, jejíž signalizovaný stav značí přítomnost dat
ve vnitřním kontajneru
bool CMsgEndpoint::Send | ( | CMsgData * | cMsg | ) |
odeslání dat
Provede uložení předaných dat do formátu zprávy WM_COPYDATA
a jejich odeslání pomocí SendMessage
do cílového okna.
[in] | cMsg | data zprávy k odeslání (kromě pole binárních dat obsahují i stavové slovo a handle přijímacího okna) |