Rezervační systém
|
serverová část TCP komunikace ...
#include <ServerTcp.h>
Veřejné metody | |
CServerTcp (unsigned uiThreads, const char *pszHost, FnProcess fnProcess, void *pParam) | |
konstruktor ... | |
virtual | ~CServerTcp () |
destruktor ... | |
virtual bool | Start (void) |
spuštění serveru ... | |
virtual void | Stop (void) |
zastavení serveru ... | |
Veřejné metody dědí se z CServerConnection | |
CServerConnection (FnProcess fnProcess, void *pParam) | |
konstruktor ... | |
virtual | ~CServerConnection () |
destruktor | |
Chráněné metody | |
virtual void | CmdProcessing (SOCKET hClient) |
komunikace a zpracování příkazu ... | |
Chráněné metody dědí se z CServerConnection | |
bool | CallProcessing (unsigned *puiResult, CBlob *cCmd) |
vyvolání uživatelské funkce ... | |
serverová část TCP komunikace
Třída zajišťuje serverovou část komunikace pomocí TCP protokolu. Implementuje rozhraní CServerConnection a pro práci se sokety využívá funcionalitu CSocketEndpoint.
Při aktivování serveru (vyvoláním Start
) se vytvoří pracovní vlákno, které nastaví vnitřní soket do naslouchacího stavu a čeká na příchozí spojení. Jakmile se tak stane, vytvoří zpracovatelské vlákno, které si pro toto spojení vytvoří klientský soket, na kterém dále komunikuje, zajišťuje správné volání uživatelské funkce a nakonec spojení uzavře. Pracovní vlákno serveru mezitím může čekat na další příchozí spojení, pro něj vytvořit další zpracovatelské vlákno, atd. Zpracovatelských vláken může pracovat řada paralelně, takže případné delší zpracovávání příkazů neblokuje činnost dalších klientů.
Na diagramu je volající vlákno zobrazeno žlutými bloky, pracovní vlákno serveru pak modrými bloky a jeden reprezentant zpracovatelského vlákna barvou oranžovou.
Aplikace může spouštět více instancí TCP serverů, které pracují na různých IP adresách či portech. Jednotlivé instance se navzájem neovlivňují.
CServerTcp::CServerTcp | ( | unsigned | uiThreads, |
const char * | pszHost, | ||
FnProcess | fnProcess, | ||
void * | pParam | ||
) |
konstruktor
Vytvoření instance vicevláknového TCP serveru.
[in] | uiThreads | maximální počet paralelně běžících zpracovatelských vláken |
[in] | pszHost | určení IP adresy a portu pro naslouchací soket U serveru je možné naslouchat na všech IP adresách, které má počítač přiděleny a přijímat tak zprávy od všech vzdálených i lokálních klientů. Podporované formáty jsou popsány u CSocketEndpoint::CSocketEndpoint. |
[in] | fnProcess | adresa funkce typu FnProcess pro zpracování příkazů na serveru |
[in] | pParam | libovolný parametr, který bude předán uživatelské funkci |
|
virtual |
destruktor
Čeká na dokončení všech vláken, pak uvolní veškeré alokované zdroje.
|
protectedvirtual |
komunikace a zpracování příkazu
Při příjmu spojení je vytvořen klientský soket. Server následně volá tuto metodu, která musí zajistit příjem zprávy, její zpracování pomocí uživatelské funkce a nakonec odeslání výsledků zpracování dat zpět klentovi.
[in] | hClient | klientský soket získaný při příjmu spojení (accept ) |
Reimplementováno v CServerHttp.
|
virtual |
spuštění serveru
Implementuje CServerConnection.
|
virtual |
zastavení serveru
Server přestane přijímat zprávy od kompatibilních klientů.
Implementuje CServerConnection.