13. Komponenty NetMasters III

V této kapitole je dokončen popis komponent NetMasters. Jsou zde popsány:


Jednotka NMPop3

Jednotka obsahuje komponentu TNMPOP3, svázané třídy a typ TListEvent. Jsou zde definovány třídy:

Třída TMailMessage

Třída definuje strukturu použitou pro ukládání zpráv e-mail získaných od vzdáleného hostitele. TNMPOP3 obsahuje instanci TMailMessage jako vlastnost, nazvanou MailMessage do které je uložena současně přijatá e-mail zpráva.
Třída má následující vlastnosti:
 
property Attachments: TStringList; Vlastnost obsahuje seznam řetězců jmen souborů připojených k současné zprávě. Runtime, Read-only
property Body: TStringList; Vlastnost obsahuje tělo současné mail zprávy. Runtime, Read-only
property From: string; Vlastnost obsahuje e-mail adresu odesilatele současné mail zprávy. Runtime, Read-only
property Head: TExStringList; Vlastnost obsahuje hlavičku současné mail zprávy Runtime, Read-only
property MessageId: string; Vlastnost obsahuje identifikaci zprávy přiřazenou k současné mail zprávě mail serverem. Runtime only
property Subject: string; Vlastnost obsahuje řádek Subject současné mail zprávy. Runtime, Read-only

Třída TSummary

Třída definuje strukturu, do které jsou uloženy souhrnné informace o zprávě e-mail. Komponenta TNMPOP3 obsahuje instanci TSummary jako vlastnost, nazvanou Summary, která obsahuje souhrnné informace o právě přijaté zprávě.
Třída má vlastnosti:
 
property Bytes: integer; Vlastnost obsahuje počet slabik v současné e-mail zprávě.
property From: string; Vlastnost obsahuje e-mail adresu odesilatele zprávy.
property Header: TExStringList; Vlastnost obsahuje hlavičku pro současnou e-mail zprávu.
property MessageId: string; Vlastnost obsahuje identifikaci zprávy přiřazenou mail serverem ke zprávě.
property Subject: string; Vlastnost obsahuje řádek Subject pro současnou e-mail zprávu.

Typ TListEvent

TListEvent = procedure(Msg, Size: integer) of object;
Typ je používán pro událost OnList. Přebírá dva celočíselné parametry. Parametr Msg specifikuje číslo uváděné zprávy a parametr Size specifikuje velikost této zprávy.

Komponenta TNMPOP3

Komponenta se používá pro získávání e-mail ze serveru POP3. Komponenta vyžaduje WSOCK32.DLL. Dříve než můžeme použít komponentu TNMPOP3 pro příjem e-mail, musí být zřízeno připojení na e-mail server. To provedeme nastavením vlastnosti Host na mail server, kde máme zřízen účet a nastavením vlastností UserID a Password na identifikaci a heslo přípustného účtu e-mail na tomto serveru. Připojení k serveru je provedeno voláním Connect.
Voláním GetMailMessage e-mail může být získán z mail serveru. Různé části zprávy jsou uloženy do vlastnosti MailMessage.
Komponenta má vlastnosti:
 
property AttachFilePath: string; Vlastnost specifikuje adresář k ukládání libovolných souborů připojených ke zprávě. Implicitně jsou ukládány do adresáře aplikace. Pokud specifikovaný adresář neexistuje, pak soubory jsou ukládány do současného adresáře. Published Runtime, Designtime
property DeleteOnRead: boolean; Vlastnost určuje, zda po přečtení zprávu zrušit. Pokud má hodnotu true, pak po získání zprávy metodou GetMailMessage jsou zprávy rušeny. Při false (implicitní hodnota), zprávy zůstavají na serveru. Metoda Reset ruší všechny příznaky rušení a tedy zprávy zrušené DeleteOnRead nebo DeleteMailMessage v průběhu současného sezení jsou obnoveny. Published Run time, Design Time
property MailCount: integer; Vlastnost obsahuje počet zpráv na serveru pro daného uživatele. Hodnota je nastavena po připojení na server. Public Run time
property MailMessage: TMailMessage; Vlastnost je nastavena voláním GetMailMessage. Obsahuje data, tvořící získanou e-mail zprávu. Informace je nutno zpracovat před dalším voláním GetMailMessage Public Runtime, Read-Only
property Password: string; Vlastnost specifikuje heslo požadované metodou Connect pro připojení na mail server. Heslo musí odpovídat identifikaci uživatele specifikovaného ve vlastnosti UserID. Pokud heslo je chybné, pak vzniká událost OnAutenticationFailed. Jestliže heslo není zadáno vzniká OnAutenticationNeeded. Published RunTime, DesignTime
property Summary: TSummary; Vlastnost obsahuje souhrnné informace o e-mail zprávě. K získání celé e-mail zprávy voláme metodu GetMailMessage. Tato vlastnost je nastavena po volání GetSummary a obsahuje souhrnné informace z posledního úspěšného získání souhrnné zprávy.  Informace je nutno zpracovat před dalším voláním GetSummary. Public RunTime, ReadOnly
property UserID: string; Vlastnost specifikuje identifikaci uživatele požadovanou metodou Connect pro připojení na mail server. Pokud uživatel nemá účet na specifikovaném mail serveru (nebo je chybné heslo), pak vzniká událost OnAutenticationFailed. Pokud uživatel není specifikován vzniká událost OnAuthenticationNeeded. Published RunTime, DesignTime

Komponenta má následující metody:

function UniqueID(MailNumber: integer): string;
Metoda vrací identifikaci zprávy pro zprávu specifikovanou parametrem (číslo zprávy; může nabývat hodnot od 1 do hodnoty MailCount).

procedure DeleteMailMessage(MailNumber: integer);
Metoda ruší zprávu na mail serveru specifikovanou parametrem (číslo zprávy). V případě úspěchu vzniká OnSuccess a v případě neúspěchu OnFailure. Zrušené zprávy nejsou skutečně zrušeny do odpojení. Metodou Reset obnovíme všechny zrušené zprávy v průběhu současného sezení.

procedure GetMailMessage(MailNumber: integer);
Metoda získává mail zprávu určenou parametrem (číslo zprávy) a ukládá její data do vlastnosti MailMessage. Pokud nastane chyba, pak je generována výjimka. Pokud není zřízeno připojení, pak nastává OnConnectionRequired. Při zahájení získávání zprávy vzniká událost OnRetrieveStart a při dokončení získávání událost OnRetrieveEnd. Jestliže zpráva je získána úspěšně, pak vzniká OnSuccess. Když DeleteOnRead je nastaveno na true, pak volání GetMailMessage také označuje získanou zprávu jako zrušenou.

procedure GetSummary(MailNumber: integer);
Metoda získává souhrn zprávy pro zprávu specifikovanou parametrem (číslo zprávy) a ukládá souhrn do vlastnosti Summary. Pokud nastane chyba, pak je generována výjimka. Pokud není zřízeno připojení, pak nastává OnConnectionRequired. Při zahájení získávání souhrnu zprávy vzniká událost OnRetrieveStart a při dokončení získávání událost OnRetrieveEnd. Jestliže souhrn zprávy je získán úspěšně, pak vzniká OnSuccess.

procedure List;
Metoda získává seznam čísel zpráv a jejich velikosti. Pro každou zprávu v seznamu vzniká událost OnList (číslo zprávy a velikost jsou předány jako parametry). Pokud nastane chyba, pak je generována výjimka. Pokud není zřízeno připojení, pak nastává OnConnectionRequired.

procedure Reset;
Metoda odvolává zrušení všech zpráv označených k zrušení metodou DeleteMailMessage nebo metodou GetMailMessage s DeleteOnRead nastaveným na true v průběhu současného sezení. Při chybě je generována výjimka. Pokud není zřízeno připojení, pak nastává OnConnectionRequired. V případě úspěchu vzniká událost OnReset.

Komponenta má následující události:

property OnAuthenticationFailed: THandlerEvent;
Událost nastává, když POP3 server vyžaduje identifikaci uživatele a heslo a je poskytnuta chybná dvojice těchto informací. Pokud Handled je nastaveno na true, pak pokus o připojení je zopakován. Je-li Handled nastaveno na false, pak je generována výjimka a připojení je zrušeno.

property OnAuthenticationNeeded: THandlerEvent;
Událost nastává, když je požadována identifikace uživatele a heslo a něco z toho není poskytnuto. Pokud Handled je nastaveno na true, pak pokus o připojení je zopakován. Je-li Handled nastaveno na false, pak je generována výjimka.

property OnFailure: TNotifyEvent;
Událost vzniká při neúspěchu operace (zrušení mail zprávy nebo získávání identifikace zprávy).

property OnList: TListEvent;
Událost nastává s předáváním velikosti a čísla zprávy pro každou zprávu při volání metody List. Parametr Msg je identifikace zprávy, kterou předáváme metodám typu GetMailMessage nebo DeleteMailMessage. Parametr Size je velikost zprávy ve slabikách.

property OnReset: TNotifyEvent;
Událost nastává po úspěšném volání metody Reset. Tato událost oznamuje, že všechny zprávy označené jako zrušené, již takto označeny nejsou.

property OnRetrieveEnd: TNotifyEvent;
Událost nastává, když mail zpráva nebo sumář zprávy je kompletně získán.

property OnRetrieveStart: TNotifyEvent;
Událost nastává, když je zahájeno získávání zprávy.

property OnSuccess: TNotifyEvent;
Událost nastává, když zpráva je úspěšně označena jako zrušená, metodou DeleteMailMessage.


Jednotka NMSmtp

Jednotka obsahuje komponentu TNMSMTP s svázané třídy a typy. Je zde třída TPostMessage a typy:

Třída TPostMessage

Třída pro uložení odcházejících e-mail zpráv. TNMSMTP obsahuje instanci TPostMessage jako vlastnost PostMessage.
Třída má následující vlastnosti:
 
property Attachments: TStringList; Vlastnost specifikuje seznam souborů připojených k odcházející e-mail zprávě. Je povoleno pouze jedno jméno souboru na řádku.
property Body: TStringlist; Vlastnost obsahuje tělo zprávy určené k odeslání.
property Date: string; Vlastnost specifikuje datum odeslání e-mail. Pokud je vlastnost prázdná, pak je naplněna současným datumem.
property FromAddress: string; Vlastnost specifikuje e-mail adresu odesilatele zprávy.
property FromName: string; Vlastnost specifikuje jméno odesilatele e-mail zprávy.
property LocalProgram: string; Vlastnost specifikuje jméno aplikace odesílající e-mail. Je uloženo v části X-Mailer hlavičky.
property ReplyTo: string; Vlastnost specifikuje e-mail adresy, které budou požity při odpovídání na zprávu.
property Subject: string; Vlastnost obsahuje subjekt odesílané e-mail zprávy.
property ToAddress: TStringlist; Vlastnost specifikuje adresáty e-mail zprávy. Může být pouze jedna e-mail adresa na řádku.
property ToBlindCarbonCopy: TStringlist; Vlastnost specifikuje adresáty zprávy jimž je zpráva zasílána neočekávaně pouze na vědomí. Může být pouze jedna e-mail adresa na řádku.
property ToCarbonCopy: TStringlist; Vlastnost specifikuje adresáty zprávy jimž je zpráva zasílána pouze na vědomí. Může být pouze jedna e-mail adresa na řádku.

Typ TFileItem

TFileItem = procedure(Filename: string) of object;
Typ je použit v případě, kdy seznam souborů má být předán jako parametr události.

Typ THeaderInComplete

THeaderInComplete = procedure(var handled: boolean; hiType: integer) of object;
Událost tohoto typu je volána, když chybí prvek hlavičky.

Typ TMailListReturn

TMailListReturn = procedure(MailAddress: string) of object;
Typ je používán, když událost požaduje e-mail adresy jako parametr.

Typ TRecipientNotFound

TRecipientNotFound = procedure(Recipient: string) of object;
Typ je používán, když události je předávána e-mail adresa jako parametr, když adresát není nalezen.

Typ TSubType

TSubType = (mtPlain, mtEnriched, mtSgml, mtTabSeperated, mtHtml);
Typ je používán pro specifikaci sub-typu pro e-mail dokument. Možné hodnoty jsou:

Komponenta TNMSMTP

Komponenta umožňuje zasílání e-mail prostřednictvím Internetovského mail serveru a implementuje další příkazy specifikované RFC 821. Komponenta vyžaduje WSOCK32.DLL. Mail server pro připojení je definován vlastnostmi Host a Port. Připojení je zřízeno voláním metody Connect a zrušeno voláním metody Disconnect. Vlastnost PostMessage obsahuje data tvořící e-mail zprávu, která bude odeslána voláním metody SendMail. Existence uživatele na připojeném hostiteli může být zjišťována použitím metody Verify. Složky poštovního seznamu mohou být určeny pomocí metody ExpandList a zápisem obsluhy události pro OnMailListReturn.
Komponenta má následující vlastnosti:
 
property ClearParams: boolean; Vlastnost specifikuje zda položky vlastnosti PostMessage budou vyprázdněny po odeslání zprávy (true - implicitně) nebo ne (false).  Published Runtime, Designtime
property EncodeType: UUMethods; Vlastnost specifikuje jaký typ kódování TNMSMTP bude použit ke kódování souborů připojených k e-mail zprávě. Jsou možné pouze dvě volby: uuMime (implicitně), které používá kódování MIME base 64 a uuCode, které používá kódování UUEncode. Published Runtime, Designtime
property FinalHeader: TExStringList; Vlastnost reprezentuje hlavičku, která je aktuálně odesílána s tělem e-mail zprávy. Tato vlastnost může být prohlížena a modifikována v obsluze události OnSendStart. Public Runtime
property PostMessage: TPostMessage; Vlastnost obsahuje zprávu, která je odesílána. Pokud ClearParams je true, pak když metoda SendMail kompletuje zprávu, obsah vlastnosti PostMessage je vyprazdňován. Published Runtime, Designtime
property UserID: string; Vlastnost specifikuje identifikaci uživatele pro přihlášení k hostiteli SMTP. Není nutné pro přihlášení ke všem serverům SMTP, ale většina serverů neumožní odesílání zpráv bez přípustné identifikace uživatele. Pokud identifikace je požadována a není dodána vzniká OnAutenticationFailed. Published Runtime, Designtime

Komponenta má následující metody:

function ExpandList(MailList: string): boolean;
Metoda je používána k získání členů poštovního seznamu na SMTP serveru. Parametr specifikuje seznam k získání jmen nebo adres. Když adresy jsou vráceny z hostitele SMTP, pak vzniká událost OnMailListReturn.

function ExtractAddress(TotalAddress: string): string;
Metoda extrahuje e-mail adresu z řetězce. Je obvykle používána v interním zpracování, ale je veřejná a může být používána kdekoliv. Parametr specifikuje rozkládaný řetězec. Tato funkce přebírá řetězec formátovaný následujícím způsobem:
Persons Name <email@host.ext>
Persons Name:email@host.ext
Metoda nevyžaduje připojení na hostitele SMTP.

function Verify(UserName: string): boolean;
Metoda se používá k ověření existence uživatele na hostiteli SMTP. Parametr specifikuje uživatele k ověření. Některé hostitelé požadují pouze jméno uživatele (jméno před @ v adrese), zatímco někteří jiní hostitelé požadují celou adresu k ověření. Pokud uživatel je nalezen, pak je vráceno true, jinak je vraceno false.

procedure ClearParameters;
Metoda vyprazdňuje obsah vlastnosti PostMessage. Položky ToAddress, ToCarbonCopy, ToBlindCarbonCopy a Attachments jsou vyprázdněny. K vyprázdnění položky Body voláme PostMessage->Body->Clear(). Metoda je volána automaticky po každém volání SendMail, pokud vlastnost ClearParams je nastavena na true.

procedure SendMail;
Metoda odesílá e-mail zprávu definovanou vlastností PostMessage. Pokud ClearParams je nastavena na true, pak při odeslání zprávy je volána metoda ClearParameters. Bezprostředně před odesláním zprávy vzniká OnSendStart. Jestliže zpráva je úspěšně odeslána, pak vzniká OnSuccess a při neúspěchu vzniká OnFailureEvent.

Komponenta má tyto události:

property OnAuthenticationFailed: THandlerEvent;
Událost nastává při pokusu klienta připojit se ke vzdálenému hostiteli při zadání chybné identifikace nebo chybného hesla. Pokud parametr Handled je nastaven na true, pak je zopakován pokus o autentizaci. Jestliže tento druhý pokus je stále neúspěšný, pak je generována výjimka. Pokud Handled je nastaven na false (implicitně), pak je generována výjimka a připojení je neúspěšné.

property OnFailure: TNotifyEvent;
Událost nastává, když odcházející e-mail zpráva není odeslána úspěšně.

property OnSendStart: TNotifyEvent;
Událost nastává bezprostředně před odesláním e-mail zprávy. Je to poslední možnost modifikovat odcházející zprávu.

property OnSuccess: TNotifyEvent;
Událost nastává při úspěšném odeslání e-mail zprávy.

property OnAttachmentNotFound: TFileItem;
Událost nastává, když soubor připojený k odcházející e-mail zprávě není nalezen. Parametr TFileItem může identifikovat chybějící soubor.

property OnEncodeEnd: TFileItem;
Událost nastává, když soubor připojený k odcházející e-mail zprávě je kompletně zakódován pro přenos. Parametr TFileItem určuje jméno právě zakódovaného souboru.

property OnEncodeStart: TFileItem;
Událost nastává, když připojený soubor bude kódován pro přenos. Parametr TFileItem určuje jméno právě kódovaného souboru.

property OnHeaderIncomplete: THeaderInComplete;
Událost nastává, když některá z následujících vlastností PostMessage je prázdná:

Mimo parametru Handled, je také předáván parametr hiType. Specifikuje, která část hlavičky chybí. Možné hodnoty jsou: Pokud Handled je nastaveno na true, pak pokus o odeslání je zopakován, pokud údaj není stále zadán, pak je generována výjimka. Když Handled je false, pak zpráva není odesílána a je generována výjimka.

property OnMailListReturn: TMailListReturn;
Událost nastává, když metoda ExpandList získává e-mail addresy. Adresy jsou předány jako parametr.

property OnRecipientNotFound: TRecipientNotFound;
Událost nastává, když některý z adresátů specifikovaných ve vlastnosti PostMessage (ToAddress, ToCarbonCopy nebo ToBlindCarbonCopy) není nalezen. Nenalezená adresa je předána jako parametr.


Komponenta TNMUUProcessor

Komponenta zakódovává soubory pro přenos po Internetu nebo Intranetu a dekóduje je do jejich původního tvaru. Komponenta je odvozena od TComponent. Nastavíme vlastnost InputFile na zpracovávaný soubor, vlastnost Method určuje styl kódování a vlastnost OutputFile výsledný soubor. Potom voláním metody Encode nebo Decode provedeme zakódování nebo dekódování souboru.
Komponenta má následující vlastnosti:
 
property InputStream: TStream; Vlastnost specifikuje kódovaný nebo dekódovaný proud. Musí být nastavena dříve než voláme metodu Encode nebo Decode. Published RunTime
property Method: UUMethods; Vlastnost určuje použitou metodu kódování. Možné hodnoty jsou uuMime (implicitně) a uuCode Published DesignTime, RunTime
property OutputStream: TFileStream; Vlastnost specifikuje proud pro uložení výsledného souboru. Musí být nastavena dříve než voláme metodu Encode nebo Decode. Published RunTime

Komponenta má následující metody:

procedure Decode;
Metoda dekóduje proud dat specifikovaný vlastností InputStream, pomocí metody určené vlastností Method a ukládá data do proudu specifikovaného vlastností OutputStream.

procedure Encode;
Metoda kóduje proud dat specifikovaný vlastností InputStream, pomocí metody určené vlastností Method a ukládá data do proudu specifikovaného vlastností OutputStream.

Komponenta má události:

procedure OnBeginDecode: TNotifyEvent;
Událost nastává při zahájení dekódování.

procedure OnBeginEncode: TNotifyEvent;
Událost nastává při zahájení kódování.

procedure OnEndDecode: TNotifyEvent;
Událost nastává při dokončení dekodování.

procedure OnEndEncode: TNotifyEvent;
Událost nastává při dokončení kódování.


Jednotka NMSTRM

Jednotka obsahuje komponentu TNMStrm pro odesílání proudů po Internetu a komponentu TNMStrmServ pro příjem těchto proudů.
Hlavním významem komponent v této jednotce je poskytnout příklad, který můžeme použít jako základ pro řešení vývojových problémů se zákaznickými protokoly Internetu. Mimo těchto dvou komponent je zde definován i typ TStrmEvent.

Typ TStrmEvent

TStrmEvent = procedure(Sender: TComponent; const sFrom: string;
      strm: Tstream) of object;
Typ události použité pro zachycování přicházejících proudů. Parametr sFrom specifikuje jméno odesilatele proudu a parametr strm je proud odeslaný uživatelem.

Komponenta TNMStrm

Komponenta je používána pro odesílání proudů na proudový server prostřednictvím Internetu. Musí být použita v páru s komponentou TNMStrmServ k poskytnutí obousměrné komunikace. Vyžaduje použití WSOCK32.DLL.
Dříve než můžeme odeslat proud, musíme nastavit vlastnost Host na vzdáleného hostitele, kterému chceme odeslat proud. Musíme také nastavit vlastnost Port na odpovídající port na vzdáleném hostiteli. Nastavíme vlastnost FromName, aby příjemce proudu věděl od koho proud pochází. Po nastavení těchto vlastností můžeme proud odeslat voláním metody PostIt.
Komponenta má vlastnost
 
property FromName: string; Vlastnost specifikuje jméno odesilatele odcházejícího proudu. Tato hodnota je použita serverem, aby věděl od koho data pocházejí. Published Runtime, designtime

metodu

function PostIt(const sStrm: TStream): string;
která odesílá proud určený parametrem na vzdáleného hostitele specifikovaného vlastností Host. Parametr je TStream (nebo jeho potomek), který obsahuje odesílaná data. Vrácená hodnota je odpověď OK od serveru, pokud proud byl přijat správně. Metoda zpracovává všechna připojení/odpojení na vzdáleného hostitele. Když zpráva byla odeslána, pak nastává událost OnMessageSent.

a událost

property OnMessageSent: TNotifyEvent;
Událost vzniká, když metoda PostIt byla provedena úspěšně.

Komponenta TNMStrmServ

Komponenta je používána pro příjem proudů odeslaných komponentou TNMStrm. Použití komponenty vyžaduje WSOCK32.DLL. V průběhu návrhu naší aplikace nastavíme vlastnost Port v Inspektoru objektů na port kde server bude naslouchat, pokud nechceme použít implicitní hodnotu. Pro příjem a zpracování zprávy zapíšeme obsluhu události OnMSG.
Komponenta má událost:

property OnMSG: TStrmEvent;
Událost nastává, když proud je přijat. Parametr sFrom specifikuje jméno odesilatele proudu a parametr strm je přijatý proud. Data z proudu v parametru strm musíme přečíst před ukončením události, jinak jsou ztracena.


Jednotka NMUDP

Jednotka obsahuje komponentu TNMUDP a potřebné typy. Jedná se o typy:

Typ TBuffInvalid

TBuffInvalid = procedure(var handled: boolean; var Buff: array of char;
               var length: integer) of object;
Typ je používán událostí OnBufferInvalid.

Typ THandlerEvent

THandlerEvent = procedure(var handled: boolean) of object;
Typ je používán pro události, které mají možnost volit přepisování implicitního chování komponenty. Obvykle parametr handled je false, když je prováděna implicitní akce komponenty. Při nastavení na true, implicitní akce komponenty je přepsána.

Typ TOnErrorEvent

TOnErrorEvent = procedure(Sender: TComponent; errno: word; Errmsg: string) of object;
Typ používaný událostí oznamující chybu.

Typ TOnReceive

TOnReceive = procedure(Sender: TComponent; NumberBytes: Integer;
             FromIP: string; Port: integer) of object;
Typ používaný pro zpracování přicházejících dat v komponentě TNMUDP.

Typ TOnStatus

TOnStatus = procedure(Sender: TComponent; status: string) of object;
Typ události pro události, které oznamují stavové zprávy.

Typ TStreamInvalid

TStreamInvalid = procedure(var handled: boolean; Stream: TStream) of object;
Typ je modifikací typu události THandler, pro obsloužení chybných proudů. Pokud parametr handled je false (implicitní hodnota), pak je provedena implicitní akce komponenty. Při hodnotě true implicitní akce komponenty je ignorována.

Komponenta TNMUDP

Komponenta je používána pro implementaci UDP (User Datagram Protocol) pro zasílání paketů datagramů prostřednictvím Internetu podle RFC 768.
Před odesláním paketů datagramů pomocí UDP, musíme znát vzdáleného hostitele a vzdálený port na který budeme zasílat data. Vzdáleného hostitele přiřadíme vlastnosti RemoteHost a vzdálený port vlastnosti RemotePort. K odeslání dat na vzdáleného hostitele můžeme použít metodu SendBuffer (pole znaků) nebo SendStream (proud dat).
Dříve než můžeme přijímat UDP data, musíme nastavit vlastnost LocalPort. Tato vlastnost musí být nastavena při návrhu a nesmí být měněna za běhu. Když data UDP jsou dostupná pro čtení, vzniká událost OnDataAvailable. V této události pro čtení dat použijeme metodu ReadBuffer (čtení dat do pole) nebo ReadStream (čtení dat do proudu).
Komponenta má následující vlastnosti:
 
property LocalPort: integer; Vlastnost specifikuje číslo portu k naslouchání zasílaným paketům datagramu. Tato vlastnost může být nastavena na 0, pokud již přijímáme UDP data. Published Runtime*, design-time
property RemoteHost: string; Vlastnost specifikuje tečkovou IP adresu nebo jméno hostitele vzdáleného počítače, který je cílem metod SendBuffer a SendStream. Published Runtime, design-time
property RemotePort: integer; Vlastnost specifikuje port na vzdáleném hostiteli k zasílání dat pomocí metod SendBuffer a SendStream. Published Runtime, design-time
property ReportLevel: integer; Vlastnost určuje úroveň podrobnosti stavových zpráv oznamovaných událostí OnStatus. Možné hodnoty jsou: Status_None, Status_Informational (implicitní), Status_Basic, Status_Routines, Status_Debug, Status_Trace.  Published Runtime, design-time

*Tato vlastnost může být nastavována pouze během návrhu. Pokud komponenta je vytvářena dynamicky v našem kódu (pomocí metody Create), pak vlastnost LocalPort musí být nastavena zde.

Komponenta má následující metody:

constructor Create(AOwner: TComponent); override;
Metoda alokuje paměť a vytváří bezpečnou instanci komponenty TNMUDP.

destructor Destroy; override;
Ve své aplikaci nevoláme metodu Destroy, musíme volat Free. Metoda Destroy uvolňuje komponentu TNMUDP a jí vlastněné komponeny.

procedure ReadBuffer(var Buff: array of char; var length: integer);
Metoda čte přicházející UDP data do vyrovnávací paměti specifikované prvním parametrem. Druhý parametr určuje velikost vyrovnávací paměti.

procedure ReadStream(DataStream: TStream);
Metoda je používána pro čtení UDP dat přijatých ze vzdáleného počítače do proudu určeného parametrem (TStream nebo jeho potomek).

procedure SendBuffer(Buff: array of char; length: integer);
Metoda je určena pro odeslání pole znaků na vzdáleného hostitele. Znaky jsou uloženy v poli určeném prvním parametrem a jejich počet je určen druhým parametrem. Pokud pole neobsahuje data vzniká OnBufferInvalid.

procedure SendStream(DataStream: TStream);
Metoda je určena k odeslání proudu dat určeného parametrem (TStream nebo jeho potomek) na vzdáleného hostitele. Pokud proud neobsahuje data vzniká OnStreamInvalid.

Komponenta má tyto události:

property OnBufferInvalid: TBuffInvalid;
Událost nastává, pokud vyrovnávací paměť odesílaná metodou SendBuffer neobsahuje data. Parametr Buff je odesílaná vyrovnávací paměť a parametr length je velikost vyrovnávací paměti. Tyto parametry mohou být v obsluze události modifikovány tak, aby určovaly přípustnou vyrovnávací paměť. Po jejich modifikaci můžeme nastavit parametr handled na true k opětovnému pokusu o odeslání dat. Pokud parametr handled je false (implicitně), je generována výjimka.

property OnDataReceived: TOnReceive;
Událost nastává, když data jsou přijata. Parametr NumberBytes specifikuje počet přijatých slabik, FromIP specifikuje IP adresu odesilatele a Port určuje port, který odeslal data.

property OnStatus: TOnStatus;
Událost vzniká, když stav komponenty se změní. Parametr status je současný stav komponenty.

property OnStreamInvalid: TStreamInvalid;
Událost nastává, pokud proud odeslaný metodou SendStream neobsahuje data. Parametr Stream je proud neobsahující data. Můžeme jej naplnit daty a parametr handled nastavit na true pro opětovné odeslání dat. Pokud parametr handled je false (implicitně), je generována výjimka.

property OnDataSend: TNotifyEvent;
Událost nastává, když data byla úspěšně odeslána (není tím ale zajištěno, že data budou přijata).

property OnInvalidHost: THandlerEvent;
Událost nastává, když vlastnost RemoteHost je chybná. Pokud parametr handled je nastaven na true, pak data jsou odeslána znova. Po druhém neúspěchu je generována výjimka. Jestliže handled je false pak je generována výjimka.


Komponenta HTML

Komponenta umožňuje vytvářet prohlížeč HTML. Jedná se již o poslední komponentu dodávanou NetMasters. Tato komponenta je již poměrně zastaralá, používá HTML verze 2 a nebudeme se jí podrobněji zabývat.

  1. S komponentou TNMPOP3 se seznámíme v následující aplikaci. Začneme vývoj nové aplikace a na formulář umístíme komponenty: 6x TEdit, TMemo, TCheckBox, 2x TButton a TNMPOP3. Komponenty mají tento význam:
  2. Obsluha stisku prvního tlačítka je tvořena příkazy:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (NMPOP31->Connected)
        NMPOP31->Disconnect();
      else
        {
          NMPOP31->Host = Edit1->Text;
          NMPOP31->UserID = Edit2->Text;
          NMPOP31->Password = Edit3->Text;
          NMPOP31->DeleteOnRead = CheckBox1->Checked;
          NMPOP31->AttachFilePath = Edit4->Text;
          NMPOP31->Connect();
        }
    }
    Obsluhu události OnConnect komponenty NMPOP31 tvoří (je zjištěn počet zpráv):
    void __fastcall TForm1::NMPOP31Connect(TObject *Sender)
    {
      if (NMPOP31->MailCount > 0)
        ShowMessage(IntToStr(NMPOP31->MailCount)+" messages in your mailbox");
      else
        ShowMessage("No messages waiting");
    }
    Obsluhu stisku druhého tlačítka tvoří:
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      AnsiString S;
      int M;
      if (NMPOP31->MailCount > 0)
        {
          if (InputQuery("Retrieve an E-Mail message",
            "Which message? (1-"+IntToStr(NMPOP31->MailCount)+")", S))
            {
              M = StrToIntDef(S, -1);
              if ((M < 0) || (M > NMPOP31->MailCount))
                ShowMessage("Invalid message index");
              else
                NMPOP31->GetMailMessage(M);
            }
        }
      else
        ShowMessage("No Messages to Get");
    }
    Aplikace obsahuje ještě jednu obsluhu události:
    void __fastcall TForm1::NMPOP31RetrieveEnd(TObject *Sender)
    {
      Memo1->Text = NMPOP31->MailMessage->Body->Text;
      Edit6->Text = NMPOP31->MailMessage->Subject;
      Edit5->Text = NMPOP31->MailMessage->From;
    }
    Po přijmu zprávy jsou její informace zobrazeny. Aplikaci si prostudujte a zjistěte jak pracuje.
  3. Již hotovou aplikaci používající komponentu TNMPOP3 nalezneme v adresáři Program Files\Borland\CBuilder\Examples\Interner\Pop3. Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
  4. S komponentou TNMSMTP se seznámíme v následující aplikaci. Začneme vývoj nové aplikace a na formulář umístíme 5x TMemo, 8x TEdit, TListBox, 3x TButton, TCheckBox, TNMSMTP, TRadioGroup a TOpenDialog. Komponenty mají tento význam:
  5. Obsluhy stisku tlačítek jsou tvořeny příkazy:
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if (NMSMTP1->Connected)
        NMSMTP1->Disconnect();
      else
        {
          NMSMTP1->Host = Edit1->Text;
          NMSMTP1->UserID = Edit2->Text;
          NMSMTP1->Connect();
        }
    }
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
      if (NMSMTP1->Connected)
        {
          NMSMTP1->ClearParams = CheckBox1->Checked;
          NMSMTP1->SubType = mtPlain;
          switch(RadioGroup1->ItemIndex)
            {
              case 0: NMSMTP1->EncodeType = uuMime;
              case 1: NMSMTP1->EncodeType = uuCode;
            }
          NMSMTP1->PostMessage->FromAddress = Edit4->Text;
          NMSMTP1->PostMessage->FromName = Edit5->Text;
          NMSMTP1->PostMessage->ToAddress->Text = Memo1->Text;
          NMSMTP1->PostMessage->ToCarbonCopy->Text = Memo3->Text;
          NMSMTP1->PostMessage->ToBlindCarbonCopy->Text = Memo2->Text;
          NMSMTP1->PostMessage->Body->Text = Memo4->Text;
          NMSMTP1->PostMessage->Attachments->Text = ListBox1->Items->Text;
          NMSMTP1->PostMessage->Subject = Edit8->Text;
          NMSMTP1->PostMessage->LocalProgram = Edit6->Text;
          NMSMTP1->PostMessage->Date = Edit3->Text;
          NMSMTP1->PostMessage->ReplyTo = Edit7->Text;
          NMSMTP1->SendMail();
        }
      else
        ShowMessage("You need to connect before you can send your message");
    }
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      NMSMTP1->ClearParameters();
      Edit3->Clear();
      Edit4->Clear();
      Edit5->Clear();
      Edit6->Clear();
      Edit7->Clear();
      Edit8->Clear();
      Memo1->Clear();
      Memo2->Clear();
      Memo3->Clear();
      Memo4->Clear();
      Memo5->Clear();
      ListBox1->Clear();
    }
    Obsluha události OnKeyDown komponenty ListBox1 je tvořena příkazy (přidávání a rušení přiřazených souborů):
    void __fastcall TForm1::ListBox1KeyDown(TObject *Sender,
       WORD &Key, TShiftState Shift)
    {
      if (Key == VK_INSERT)
        if (OpenDialog1->Execute())
          ListBox1->Items->Add(OpenDialog1->FileName);
      if (Key == VK_DELETE)
        ListBox1->Items->Delete(ListBox1->ItemIndex);
    }
    Následuje několik obsluh událostí komponenty TNMSMTP:
    void __fastcall TForm1::NMSMTP1AttachmentNotFound(AnsiString Filename)
    {
      Memo5->Lines->Add("File attachment "+Filename+" not found");
    }
    void __fastcall TForm1::NMSMTP1AuthenticationFailed(bool &Handled)
    {
      AnsiString S;
      S = NMSMTP1->UserID;
      if (InputQuery("Authentication Failed", "Invalid User ID. New User ID: ", S))
        {
          NMSMTP1->UserID = S;
          Handled = TRUE;
        }
    }
    void __fastcall TForm1::NMSMTP1Connect(TObject *Sender)
    {
      Memo5->Lines->Add("Connected");
    }
    void __fastcall TForm1::NMSMTP1SendStart(TObject *Sender)
    {
      Memo5->Lines->Add("Sending Message");
    }
    void __fastcall TForm1::NMSMTP1EncodeStart(AnsiString Filename)
    {
      Memo5->Lines->Add("Encoding "+Filename);
    }
    void __fastcall TForm1::NMSMTP1EncodeEnd(AnsiString Filename)
    {
      Memo5->Lines->Add(Filename+" encoded");
    }
    void __fastcall TForm1::NMSMTP1Failure(TObject *Sender)
    {
      Memo5->Lines->Add("Message delivery failure");
    }
    void __fastcall TForm1::NMSMTP1Success(TObject *Sender)
    {
      Memo5->Lines->Add("Message sent successfully");
    }
    void __fastcall TForm1::NMSMTP1HeaderIncomplete(bool &handled, int hiType)
    {
      AnsiString S;
      switch(hiType)
        {
          case hiFromAddress:
            {
              if(InputQuery("Missing From Address","Enter From Address:",S))
                {
                  NMSMTP1->PostMessage->FromAddress = S;
                  handled = TRUE;
                }
            }
          case hiToAddress:
            {
              if (InputQuery("Missing To Address", "Enter To Address: ", S))
                {
                  NMSMTP1->PostMessage->ToAddress->Text = S;
                  handled = TRUE;
                }
            }
        }
    }
    void __fastcall TForm1::NMSMTP1RecipientNotFound(AnsiString Recipient)
    {
      Memo5->Lines->Add("Recipient "+Recipient+" not found");
    }
    Po spuštění aplikace zadáme požadované informace do editačních ovladačů a ovladačů Memo. Pro položky ToAddress, ToCarbonCopy a TBlindCarbonCopy může být zadáno více adres. Stiskem prvního tlačítka se připojíme a stiskem druhého tlačítka zprávu odešleme. Druhým stiskem prvního tlačítka se opět odpojíme.
  6. Již hotovou aplikaci používající komponentu TNMSMTP nalezneme v adresáři Program Files\Borland\CBuilder\Examples\Interner\Smtp. Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
  7. Již hotovou aplikaci používající komponentu TNMStrm a komponentu TNMStrmServ nalezneme v adresáři Program Files\Borland\CBuilder\Examples\Interner\stream. Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
  8. Již hotovou aplikaci používající komponentu TNMUDP nalezneme v adresáři Program Files\Borland\CBuilder\Examples\Interner\Udp. Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
13. Komponenty NetMasters III