V této kapitole pokračuje popis komponent NetMasters.
Jsou zde popsány:
Jednotka NMHttp
Jednotka NMHttp obsahuje komponentu
TNMHTTP
a třídu a typy, které komponenta používá. Je zde používána třída
THeaderInfo
a typy:
Třída THeaderInfo
Třída je poskytnuta k usnadnění používání rozhraní pro přidávání
nejobecnějších prvků hlavičky HTTP. Tyto prvky jsou nepovinné a jsou používány
z různých důvodů.
Třída má následující vlastnosti:
property Cookie: string; |
Vlastnost obsahuje odcházející Cookie, který bude
odeslán na vzdáleného hostitele, když děláme požadavek HTTP. Toto je užitečné
pro návrat Cookie dříve zaslaného na stejného hostitele. |
property LocalMailAddress: string; |
Vlastnost specifikuje e-mail adresu lokálního uživatele,
vytvářející požadavek HTTP. |
property LocalProgram: string; |
Vlastnost specifikuje jméno lokální aplikace zasílající
požadavek HTTP. |
property Password: string; |
Vlastnost specifikuje heslo, pokud pro přístup k dokumentu
na WWW je požadováno. Poskytnuté heslo musí odpovídat uživateli zadanému
ve vlastnosti
UserID. |
property Referer: string; |
Vlastnost specifikuje adresu místa, které ukazuje klientu
na požadovaný dokument. Aplikace tuto vlastnost získá z kliknutí na nějaké
vazbě na stránce, kterou stránka používá k odkazování na stránku požadovanou
vazbou. |
property UserId: string; |
Vlastnost specifikuje identifikaci uživatele, pokud pro
přístup k dokumentu WWW je požadováno. Identifikace uživatele musí odpovídat
heslu uvedenému ve vlastnosti Password. |
Typ CmdType
CmdType = (CmdGET, CmdOPTIONS, CmdHEAD, CmdPOST, CmdPUT, CmdPATCH,
CmdCOPY,
CmdMOVE,
CmdDELETE, CmdLINK, CmdUNLINK, CmdTRACE, CmdWRAPPED);
Typ CmdType je používán jako typ prováděného příkazu
HTTP.
Typ TResultEvent
TResultEvent = procedure(Cmd: CmdType) of object;
Typ události je použit, když událost potřebuje specifikovat
příkaz HTTP, který je prováděn.
Komponenta TNMHTTP
Komponenta TNMHTTP je používána pro provádění přenosů
HTTP ve WWW. Tato komponenta odpovídá verzi 1.1 HTTP.
Pomocí metody Get, dokument může být získán z
WWW serveru, metodou
Post můžeme dokument odeslat na WWW server,
metodou Put dokument může být vytvořen na WWW serveru, metodou Delete
dokument může být odstraněn z WWW serveru, metodou Trace můžeme
zobrazit data a hlavičku odeslané na vzdálený server a metodou Option
můžeme získat příkazy podporované serverem a specifikovaným dokumentem.
Komponenta má tyto vlastnosti:
property Body: string; |
Vlastnost může být použita jedním ze dvou způsobů: Pokud
InputFileMode
je true, pak vlastnost Body musí být nastavena na cestu a
jméno souboru pro uložení získaného dokumentu. Po volání některé metody,
která získává dokument z Internetu pomocí HTTP, soubor specifikovaný touto
vlastností bude obsahovat tělo získaného dokumentu. Tato metoda je užitečná,
když získáváme binární dokumenty, jako soubory WAV, soubory obrázků a pod.
Jestliže InputFileMode je false, pak Body
bude obsahovat tělo dokumentu získaného některou z metod, které získávají
dokumenty pomocí HTTP. Tato možnost je užitečná, když získáváme HTML nebo
jiné textové dokumenty z Internetu pro rozkládání. |
Published |
Runtime, designtime |
property CookieIn: string; |
Vlastnost obsahuje Cookie zaslaný ze vzdáleného
hostitele, pokud byl zaslán. Vlastnost je nastavována pouze po získání
dokumentu ze sítě. |
|
Runtime, Read-Only |
property Header: string; |
Vlastnost může být podobně jako Body používána
dvojím způsobem. Místo těla dokumentu, ale pojednává o hlavičce dokumentu. |
Published |
Runtime, designtime |
property HeaderInfo: THeaderInfo; |
Vlastnost specifikuje hlavičkové informace, které jsou
zaslány na HTTP server, když děláme požadavek pro dokument. Hlavička zasílaná
na vzdáleného hostitele, když je požadován dokument pomocí HTTP může být
modifikována před odesláním vložením dalších položek modifikací vlastnosti
SendHeader
v obsluze OnAboutToSend. |
Published |
Runtime, Designtime |
property InputFileMode: boolean; |
Vlastnost určuje, jak budou zpracovány přicházející dokumenty
a jejich hlavičky. Viz vlastnosti Body a Header. |
|
|
property OutputFileMode: boolean; |
Vlastnost specifikuje jak budou zpracovány odcházející
data použitá metodami Post, Put a Trace. Při nastavení
na true, data pro tyto metody budou získány z lokálních souborů.
Při nastavení na
false, data pro tyto metody jsou předána jako parametr. |
|
|
property SendHeader: TExStringList; |
Vlastnost obsahuje hlavičkové informace zasílané na vzdáleného
hostitele, když požadujeme dokument pomocí HTTP. Vlastnost může být modifikována
v
OnAboutToSend přidáním hlavičkových informací uživatele. |
Public |
Runtime only |
Komponenta má následující metody:
procedure Delete(URL: string); virtual;
Metoda zruší parametrem specifikovaný dokument. Parametr
musí být úplně kvalifikované URL, včetně části http://, aby tato
metoda pracovala správně. Musíme mít přístup k modifikaci (zápisu) souborů
na místě, kde soubor chceme zrušit. Pokud metoda je úspěšná, pak je generována
událost
OnSuccess s parametrem Cmd s hodnotou CmdDELETE.
Když metoda je neúspěšná, pak je generovaná událost OnFailure s
hodnotou parametru
CmdDELETE. Vlastnost Body bude obsahovat
chybný příkaz (když dokument nebyl zrušen) nebo potvrzení (když soubor
byl zrušen).
procedure Get(URL: string); virtual;
Metoda získá dokument specifikovaný parametrem. Pokud
InputFileMode
je true, pak dokument získávaný metodou Get je uložen do
souboru, který je specifikován vlastností Body a hlavička je uložena
do souboru specifikovaného vlastností Header. Pokud InputFileMode
je false, pak dokument získaný metodou Get je uložen ve vlastnosti
Body
jako řetězec a jeho hlavička je uložena do vlastnosti Header jako
řetězec. Pokud metoda je úspěšná, pak je generována událost OnSuccess
s parametrem Cmd s hodnotou CmdGET. Když metoda je neúspěšná,
pak je generovaná událost OnFailure s hodnotou parametru CmdGET.
procedure Head(URL: string); virtual;
Metoda získává hlavičku dokumentu specifikovaného parametrem
URL. Pokud
InputFileMode je true, pak získaná hlavička je
uložena do souboru specifikovaného vlastností Header, když je false,
pak hlavička je uložena do vlastnosti Header jako řetězec. Pokud
metoda je úspěšná, pak je generována událost OnSuccess s parametrem
Cmd
s hodnotou
CmdHEAD. Když metoda je neúspěšná, pak je generovaná
událost OnFailure s hodnotou parametru CmdHEAD.
procedure Options(URL: string); virtual;
Metoda vrací příkazy podporované serverem HTTP a dotazovaným
dokumentem. Parametr URL specifikuje místo k získání voleb. Podporované
příkazy jsou specifikovány ve vlastnosti Header. Prvek hlavičky
Public
specifikuje příkazy podporované serverem HTTP. Prvek hlavičky
Allow
specifikuje příkazy podporované dokumentem specifikovaným parametrem URL.
Pokud metoda je úspěšná, pak je generována událost OnSuccess s parametrem
Cmd
s hodnotou CmdOPTIONS. Když metoda je neúspěšná, pak je generovaná
událost OnFailure s hodnotou parametru CmdOPTIONS.
procedure Post(URL, PostData: string); virtual;
Metoda odesílá informace specifikované parametrem PostData
na dokument specifikovaný parametrem URL. Pokud vlastnost OutputFileMode
je true, pak parametr PostData specifikuje cestu a jméno
souboru, který obsahuje odesílaná data. Jestliže OutputFileMode
je false, pak parametr PostData musí obsahovat odesílaná
data. Pokud metoda je úspěšná, pak je generována událost OnSuccess
s parametrem Cmd s hodnotou CmdPOST. Když metoda je neúspěšná,
pak je generovaná událost OnFailure s hodnotou parametru CmdPOST.
procedure Put(URL, PutData: string); virtual;
Metoda je používána k vytvoření dokumentu na HTTP serveru.
Parametr URL specifikuje vytvářený dokument na vzdáleném HTTP serveru.
Pokud vlastnost
OutputFileMode je true, pak parametr PutData
specifikuje cestu a jméno souboru, který obsahuje data vytvářeného dokumentu.
Jestliže
OutputFileMode je false, pak parametr PutData
musí obsahovat data vytvářeného dokumentu. Aby metoda mohla správně pracovat
musíme mít zápisová práva na hostiteli, kde dokument vytváříme. Pokud metoda
je úspěšná, pak je generována událost OnSuccess s parametrem Cmd
s hodnotou CmdPUT. Když metoda je neúspěšná, pak je generovaná událost
OnFailure
s hodnotou parametru CmdPUT.
procedure Trace(URL, TraceData: string); virtual;
Metoda vrací hlavičku požadavku zaslanou klientem jako
tělo dokumentu mimo návratu dat zaslaných v parametru TraceData.
Metoda se často používá při ladění a hledání problémů s hostitelem HTTP.
Parametr URL specifikuje dokument, který byl požadován. Pokud vlastnost
OutputFileMode
je
true, pak parametr TraceData specifikuje cestu a jméno
souboru k použití jako odeslaných dat. Jestliže OutputFileMode je
false,
pak parametr TraceData musí obsahovat data odeslaná na vzdáleného
hostitele jako řetězec. Pokud metoda je úspěšná, pak je generována událost
OnSuccess
s parametrem Cmd s hodnotou CmdTRACE. Když metoda je neúspěšná,
pak je generovaná událost OnFailure s hodnotou parametru
CmdTRACE.
Komponenta má následující události:
property OnAboutToSend: TNotifyEvent;
Událost vzniká před odesláním požadavku na vzdáleného
hostitele. Umožňuje modifikovat hlavičku požadavku obsaženou ve vlatnosti
SendHeader
vložením položek hlaviček uživatele. Událost je generována libovolnou metodou
získávající nebo zasílající data na vzdáleného hostitele.
property OnAuthenticationNeeded: TNotifyEvent;
Událost vzniká, když přístup k dokumentu vyžaduje autentizaci.
Je nutno nastavit vlastnosti Password a UserID vlastnosti
HeaderInfo.
property OnFailure: TResultEvent;
Událost nastává, když operace je neúspěšná. Parametr
Cmd
specifikuje chybující příkaz. Možné hodnoty jsou: CmdGET,
CmdOPTIONS,
CmdHEAD,
CmdPOST,
CmdPUT
a CmdDELETE.
property OnRedirect: THandlerEvent;
Událost nastává, když dokument přesměruje klienta na
jiný dokument a to na stejném nebo jiném hostiteli. Pokud parametr Handled
je nastaven na true, pak komponenta neprovede automaticky přesměrování.
Je-li parametr nastaven na false (implicitně), pak přesměrovaný
dokument je získáván.
property OnSuccess: TResultEvent;
Událost nastává, když operace je dokončena úspěšně.
Parametr
Cmd specifikuje dokončený příkaz. Možné hodnoty jsou: CmdGET,
CmdOPTIONS,
CmdHEAD,
CmdPOST,
CmdPUT
a CmdDELETE.
Jednotka NMMSG
Tato jednotka obsahuje komponentu
TNMMsg
pro zasílání jednoduchých zpráv po Internetu nebo Intranetu a komponentu
TNMMsgServ,
která je používána pro příjem zpráv odeslaných komponentou
TNMMsg.
Obě komponenty jsou odvozeny od TPowersock (a TNMMsgServ
od
TNMGeneralServer).
Hlavním významem komponent v této jednotce je poskytnutí
příkladu, který můžeme použít jako základní třídy pro řešení problémů se
zákaznickými protokoly Internetu.
Je zde také definován typ TMSGEvent.
Typ TMSGEvent
type TMSGEvent = procedure(Sender: TComponent; const sFrom, sMsg:
string) of object;
Typ je použit pro událost OnMSG. Parametr sFrom
specifikuje od koho zpráva pochází a parametr sMsg je zpráva samotná.
Komponenta TNMMsg
Komponenta je používána pro zasílání jednoduchých textových
zpráv v Internetu nebo Intranetu pomocí protokolu TCP/IP. Hostitel, kterému
zpráva bude zaslána musí být běžící server vytvořený z komponenty TNMGeneralServer.
K poskytnutí obousměrné komunikace musíme TNMMsg
párovat s komponentou
TNMMsgServ. Použití těchto komponent vyžaduje
WSOCK32.DLL.
Dříve než můžeme odeslat zprávu, musíme nejprve nastavit
vlastnost
Host na vzdáleného hostitele, kterému budeme zasílat zprávu.
Musíme také nastavit vlastnost Port na hodnotu odpovídající port
vzdáleného hostitele. Nastavením vlastnosti FromName zajistíme,
že příjemce zprávy se dozví od koho zpráva pochází. Po nastavení těchto
vlastností, můžeme zaslat zprávu voláním metody PostIt.
Komponenta má vlastnost
property FromName: string; |
Vlastnost oznamuje příjemci od koho zpráva pochází. |
Published |
DesignTime, RunTime |
metodu
function PostIt(const sMsg: string): string;
Metoda zasílá zprávu specifikovanou parametrem na vzdáleného
hostitele. Od serveru je vráceno OK, pokud odeslání je úspěšné.
Pokud zpráva je odeslána úspěšně, pak vzniká událost OnMesageSent.
Vzdálený hostitel musí akceptovat připojení, přijmout
zprávu a vrátit OK aby klient se mohl odpojit.
a událost
property OnMessageSent: TNotifyEvent;
Událost vzniká při úspěšném odeslání zprávy na vzdáleného
hostitele.
Komponenta TNMMsgServ
Komponenta je používána pro příjem zpráv od komponenty TNMMsg.
Místo používání komponent TNMMsg a TNMMsgServ se můžeme pokusit
o vytvoření svého vlastního zákaznického protokolu k řešení našeho problému.
Pro použití komponenty musíme používat WSOCK32.DLL.
Při vývoji naší aplikace nastavíme vlastnost Port
na port, kde náš server bude naslouchat (pokud se liší od implicitního).
Pro příjem a zpracování zprávy, zapíšeme obsluhu události OnMSG.
Jednotka NMNNTP
Jednotka obsahuje komponentu
TNMNNTP
a svázanou třídu a typy. Třída je TPostRecordType
a typy:
Typ TCacheMode
TCacheMode = (cmMixed, cmRemote, cmLocal);
Typ je použit k určení stylu článku, který bude použit.
Typ TGroupRetrievedCacheEvent
TGroupRetrievedCacheEvent = procedure(var Handled: boolean; name:
string;
FirstArticle, LastArticle:
integer; Posting: boolean) of object;
Typ je určen pro použití událostí OnGrouplistCacheUpdate.
Parametr
Handled specifikuje zda implicitní odkládací akce komponenty
má být provedena. Parametr name specifikuje jméno diskusní skupiny.
Parametr FirstArticle specifikuje číslo prvního článku v diskusní
skupině. Není to vždy 1. Parametr
LastArticle specifikuje číslo
posledního článku v diskusní skupině. Parametr Posting určuje zda
odeslaný článek je poskytnut této diskusní skupině.
Typ TGroupRetrievedEvent
TGroupRetrievedEvent = procedure(name: string; FirstArticle,
LastArticle: integer; Posting:
boolean) of object;
Typ je používán událostí OnGrouplistUpdate. Parametr
name
specifikuje jméno diskusní skupiny. Parametr FirstArticle specifikuje
číslo prvního článku v diskusní skupině. Není to vždy 1. Parametr
LastArticle
specifikuje číslo posledního článku v diskusní skupině. Parametr Posting
určuje zda odeslaný článek je poskytnut této diskusní skupině.
Typ THeaderCacheEvent
THeaderCacheEvent = procedure(var Handled: boolean; IdNo: integer;
From, Subject, MsgId, Date: string; ArticleNo:
integer) of object;
Typ je použit událostí OnHeaderCacheUpdate. Parametr
Handled
specifikuje zda implicitní odkládací akce komponenty má být provedena.
Parametr IdNo specifikuje identifikační číslo článku získané hlavičkou.
Parametr From specifikuje osobu, která odeslala článek na hostitele
news.
Parametr Subject specifikuje řádek subjektu článku. Parametr MsgId
specifikuje identifikaci článku. Parametr
Date určuje datum odeslání
článku novému hostiteli. Parametr
ArticleNo specifikuje číslo
článku.
Třída TPostRecordType
Typ je používán pro ukládání hlavičkových informací NNTP.
Není nutný pro odeslání zpráv, ale pro přijímání zpráv.
Třída má následující vlastnosti:
property PrAppName: string; |
Vlastnost specifikuje jméno aplikace, která odeslala
článek. |
Published |
Runtime, designtime |
property PrArticleId: integer; |
Vlastnost obsahuje identifikační číslo aktuálního článku. |
Published |
Runtime, read-only |
property PrDistribution: string; |
Vlastnost je používána ke změně distribučního rozsahu
článku. Je to čárkami oddělený seznam podobající se řádku "Newsgroup".
Předplatitelé jsou stále řízeny "Newsgroups", ale článek je také zaslán
na všechny systémy určené řádkem "Distribution". |
Published |
Runtime, designtime |
property PrFromAddress: string; |
Vlastnost specifikuje e-mail adresu osoby, která odeslala
současný nový článek. |
Published |
Runtime, designtime |
property PrNewsGroups: string; |
Vlastnost specifikuje diskusní skupinu, které je současný
článek odeslán. |
Published |
Runtime, designtime |
property PrReplyTo: string; |
Vlastnost obsahuje e-mail adresu, která může být použita
k odpovědi osobě, která odeslala současný článek. |
Published |
Runtime, designtime |
property PrSubject: string; |
Vlastnost obsahuje řádek subject ze článku. |
Published |
Runtime, designtime |
property PrTimeDate: string; |
Vlastnost obsahuje datum a čas odeslání článku. |
Published |
Runtime, designtime |
Komponenta TNMNNTP
Komponenta TNMNNTP je používána pro čtení a odesílání
internetovských zpráv na serverech news pomocí Network News Transfer
Protocol (RFC 977). Použití komponenty požaduje WSOCK32.DLL.
Dříve než můžeme provádět klíčové funkce komponenty TNMNNTP,
musíme se nejprve připojit na server news. To provedeme nastavením
vlastnosti Host na přípustný server news a voláme metodu
Connect.
Seznam diskusních skupin na daném serveru můžeme získat
voláním metody
GetGroupList. K výběru diskusní skupiny pro čtení
článku voláme metodu SetGroup a jako parametr předáme jméno požadované
diskusní skupiny. Po nastavení diskusní skupiny můžeme získat článek voláním
GetArticle.
Článek pak můžeme nalézt ve vlastnostech Body a Header. Odeslání
článku provedeme voláním metody PostArticle po naplnění vlastností
PostBody
(tělo zprávy) a PostHeader (hlavička zprávy).
Komponenta má následující vlastnosti:
property AttachFilePath: string; |
Vlastnost specifikuje umístění pro uložení souborů připojených
k článku, které jsou uvedeny ve vlastnosti Attachments. Implicitní
hodnota této vlastnosti je prázdná; soubory jsou ukládány do adresáře aplikace.
Soubory jsou ukládány pouze, pokud vlastnost ParseAttachments je
true. |
Published |
Runtime, designtime |
property Attachments: TStringList; |
Vlastnost je seznam souborů připojených k současnému
článku, který byl získán ze vzdáleného hostitele. Tyto soubory jsou pouze
dekódovány a uloženy na disk do adresáře specifikovaného vlastností AttachFilePath,
pokud vlastnost ParseAttachment je true. Vlastnost je nastavena
po volání metody GetArticle. |
Public |
Runtime, Read-Only |
property Body: TExStringList; |
Vlastnost obsahuje tělo současného článku získaného ze
vzdáleného hostitele. Vlastnost je nastavena po volání metody GetArticle
nebo GetArticleBody. Pokud je volána metoda GetArticleBody,
pak když vlastnost ParseAttachment je nastavena na true,
libovolné soubory připojené k článku nejsou rozloženy a jsou vráceny v
těle článku. |
Public |
Runtime, Read-only |
property CacheMode: TCacheMode; |
Vlastnost specifikuje typ použitého odkládání článku.
Možné hodnoty jsou definované typem TCacheMode: cmMixed -
Když články, seznamy skupin, hlavičky nebo seznamy hlaviček jsou požadovány,
pak jsou zavedeny ze vzdáleného hostitele. V tomto režimu jsou také uloženy
na disk.
cmLocal - Když články, seznamy skupin, hlavičky nebo seznamy
hlaviček jsou požadovány, pak jsou zavedeny z lokálního disku. Jestliže
na disku neexistují, pak vzniká událost OnInvalilidArticle, stejně
jako když článek neexistuje na vzdáleném hostiteli. cmRemote - Když
články, seznamy skupin, hlavičky nebo seznamy hlaviček jsou požadovány,
pak jsou zavedeny ze vzdáleného hostitele a nejsou ukládány na disk. |
|
Implicitně: cmMised |
property CurrentArticle: integer; |
Vlastnost specifikuje poslední článek, který byl zaveden
z hostitele. Je to obvykle číslo článku, který je obsažen ve vlastnostech
Body
a Header. Tato vlastnost se mění po úspěšném volání metod: GetArticle,
GetArticleBody
a GetArticleHeader. |
Public |
Runtime, Read-Only |
property GroupList: TStringList; |
Vlastnost obsahuje seznam diskusních skupin na současném
hostiteli. Vlastnost je nastavena po volání metody GetGroupList. |
Public |
Runtime, Read-Only |
property Header: TExStringList; |
Vlastnost obsahuje hlavičku současného článku získaného
z hostitele. Vlastnost je nastavena po úspěšném volání GetArticle,
GetArticleHeader
nebo GetArticleList. |
Public |
Runtime, Read-Only |
property HeaderRecord: TPostRecordType; |
Vlastnost obsahuje informace obsažené v hlavičce článku. |
Public |
Runtime Only |
property HiMessage: integer; |
Vlastnost specifikuje index nejaktuálnější zprávy (číslo),
která je dostupná v současné diskusní skupině. |
Public |
Run-time, Read-only |
property LoMessage: integer; |
Vlastnost specifikuje index nejméně aktuální zprávy (číslo),
která je dostupná v současné diskusní skupině. |
Public |
Run-time, Read-only |
property NewsDir: string; |
Vlastnost specifikuje jméno adresáře do kterého odkládáme
ukládané články a hlavičky. V současné verzi FastNet, odkládací služby
TNMNNTP
jsou zakázány. |
|
|
property ParseAttachments: boolean; |
Vlastnost určuje zda soubory připojené ke zprávám budou
dekódovány a uloženy na disk nebo ne. Při hodnotě true, soubory
jsou odděleny od těla zprávy, dekódovány a uloženy na disk. Při hodnotě
false
zůstávají v těle zprávy. |
Published |
Runtime, Designtime |
property Password: string; |
Vlastnost je používána, když při přihlašování na vzdáleného
hostitele je vyžadována autentizace. Vlastnost UserID musí být nastavena
na odpovídajícího uživatele. Při chybném heslu vzniká událost OnAuthenticationFailed.
Pokud není zadána identifikace uživatele nebo heslo a autentizace je vyžadována,
pak vzniká událost OnAuthenticationNeeded. |
Published |
Runtime, Designtime |
property PostAttachments: TStringList; |
Vlastnost je používána pro uložení jmen souborů, které
jsou připojeny k odcházející zprávě. Je nutno vkládat vždy pouze jedno
jméno souboru na řádek. |
Published |
Runtime, Designtime |
property PostBody: TExStringList; |
Vlastnost specifikuje tělo článku k odeslání. |
Published |
Runtime, Designtime |
property PostHeader: TExStringList; |
Vlastnost specifikuje hlavičku pro odesílaný článek na
vzdáleného hostitele NNTP. Zákaznické položky hlavičky mohou být přidávány
k odcházející hlavičce zprávy zpřístupněním vlastnosti Values PostHeader. |
Published |
Runtime, Designtime |
property Posting: boolean; |
Vlastnost specifikuje zda článek může být odeslán v současné
diskusní skupině. |
Public |
Runtime, Read-Only |
property PostRecord: TPostRecordType; |
Vlastnost specifikuje nejobecnější položky hlavičky použité
při odeslání článku na hostitele NNTP. |
Published |
Runtime, Designtime |
property SelectedGroup: string; |
Vlastnost specifikuje jméno současné diskusní skupiny.
Vlastnost se mění voláním metody SetGroup. |
Public |
Runtime, Read-Only |
property UserId: string; |
Vlastnost specifikuje identifikaci uživatele, pokud je
požadována autentizace při přihlašování na vzdáleného hostitele. Vlastnost
Password
musí být nastavena na heslo odpovídajícího uživatele. Při chybném heslu
vzniká událost OnAuthenticationFailed. Pokud není zadána identifikace
uživatele nebo heslo a autentizace je vyžadována, pak vyniká událost OnAuthenticationNeeded. |
Published |
Runtime, Designtime |
Komponenta má následující metody:
procedure GetArticle(Ref: integer);
Metoda získává specifiovaný článek ze vzdáleného hostitele
NNTP. Parametr specifikuje index získávaného článku od hostitele NNTP.
Pokud parametr není přípustným číslem článku, pak vzniká událost OnInvalidArticle.
Po úspěšném získání článku vzniká OnArticle. Pokud je povoleno odkládání
zpráv, pak vzniká OnArticleCacheUpdate. Po úspěšném volání této
metody jsou aktualizovány vlastnosti Header, Body a HeaderRecord.
Pokud jsou připojeny nějaké soubory, pak jsou uvedeny ve vlastnosti Attachments.
procedure GetArticleBody(Ref: integer);
Metoda získává tělo specifikovaného článku. Parametr
specifikuje index článku ze kterého získáváme tělo. Po získání těla ze
vzdáleného hostitele NNTP vzniká událost OnBody. Ne všechny servery
podporují tuto metodu.
procedure GetArticleHeader(Ref: integer);
Metoda získává hlavičku specifikovaného článku. Parametr
specifikuje index článku ze kterého získáváme hlavičku. Po získání hlavičky
ze vzdáleného hostitele NNTP vzniká událost OnHeader.
procedure GetArticleList(All: boolean; ArticleNumber: integer);
Metoda získává seznam článků v současné diskusní skupině.
Parametr
All specifikuje zda chceme získat seznam všech články v
diskusní skupině (true) nebo pouze částečný seznam. Parametr ArticleNumber
specifikuje počet článků obsažených v seznamu. Pro každý článek v seznamu
vzniká událost
OnHeaderList.
procedure GetGroupList;
Metoda získává seznam dostupných diskusních skupin ze
vzdáleného hostitele. Pro každý prvek seznamu vzniká událost OnGroupListUpdate.
procedure PostArticle;
Metoda odesílá článek v současně vybrané diskusní skupině.
Odeslaný článek je definován vlastnostmi PostRecord, PostBody,
PostHeader
a PostAttachments. Pokud zpráva je odeslána úspěšně, pak vzniká
událost OnPosted. Jestliže odeslání je neúspěšné, pak vzniká OnPostFailed.
procedure SetGroup(Group: string);
Metoda nastavuje současnou aktivní diskusní skupinu na
parametrem specifikovanou skupinu. Pokud skupina existuje, pak je vzniká
událost OnGroupSelect. Při úspěšném volání metody se změní vlastnost
SelectedGroup.
Komponenta má také několik událostí:
property OnAbort: TNotifyEvent;
Událost nastává, když je volána metoda Abort.
property OnArticle: TNotifyEvent;
Událost nastává, když je úspěšně volána metoda GetArticle.
Přijatý článek může být zpřístupněn vlastnostmi Body, Header
a Attachment.
property OnArticleCacheUpdate: THeaderCacheEvent;
Událost nastává, když článek je získán ze vzdáleného
hostitele a odkládání je povoleno. Odkládání není dostupné, pokud vlastnost
CacheMode
není nastavena správně.
property OnAuthenticationFailed: TNotifyEvent;
Událost nastává, když identifikace uživatele nebo heslo
jsou chybné.
property OnAuthenticationNeeded: THandlerEvent;
Událost nastává, když není zadána identifikace uživatele
a heslo a vzdálený hostitel vyžaduje autentizaci při přihlašování.
property OnBody: TNotifyEvent;
Událost nastává, když metoda GetArticleBody je
provedena úspěšně.
property OnBodyCacheUpdate: THandlerEvent;
Událost nastává, když metoda GetArticleBody je
provedena úspěšně a odkládání je povoleno. Záleží zde na vlastnosti CacheMode.
property OnGroupListCacheUpdate: TGroupRetrievedCacheEvent;
Událost nastává, když metoda GetGroupList je provedena
úspěšně a odkládání je povoleno. Tato událost je generována pro každou
skupinu v seznamu. Záleží zde na vlastnosti CacheMode.
property OnGroupListUpdate: TGroupRetrievedEvent;
Událost nastává, když metoda GetGroupList je provedena
úspěšně. Je generována pro každou skupinu v seznamu.
property OnGroupSelect: TNotifyEvent;
Událost nastává, když metoda SetGroup je provedena
úspěšně.
property OnGroupSelectRequired: THandlerEvent;
Událost nastává, když je volána metoda, která vyžaduje
výběr skupiny. Metody GetArticle, GetArticleBody, GetArticleHeader,
GetArticleList
a PostArticle vyžadují výběr diskusní skupiny metodou SetGroup
dříve než mohou být použity.
property OnHeader: TNotifyEvent;
Událost nastává, když hlavička článku je získána metodou
GetArticleHeader.
property OnHeaderCacheUpdate: THeaderCacheEvent;
Událost nastává, když hlavička článku je získána metodou
GetArticleHeader a odkládání je povoleno. Odkládání závisí na vlastnosti
CacheMode.
property OnHeaderList: TNotifyEvent;
Událost je volána pro každý článek v seznamu, když metoda
GetArticleList je úspěšně provedena. V této události musí být čteny
události Header a HeaderRecord, protože se při každém generování
události mění.
property OnHeaderListCacheUpdate: THandlerEvent;
Událost je volána pro každý článek v seznamu, když metoda
GetArticleList je úspěšně provedena a odkládání je povoleno.
property OnInvalidArticle: TNotifyEvent;
Událost nastává, když identifikační číslo článku předané
metodám GetArticle,
GetArticleBody nebo GetArticleHeader
neexistuje nebo je chybné.
property OnPosted: TNotifyEvent;
Událost nastane, když metoda PostArticle úspěšně
odešle článek na vzdáleného hostitele. Při neúspěchu vzniká OnPostFailed.
property OnPostFailed: TOnErrorEvent;
Událost nastane, když metoda PostArticle neúspěšně
odešle článek na vzdáleného hostitele. Při úspěchu vzniká OnPosted.
Komponenta TNMTime
Komponenta je používána pro získávání času z Internetovského
serveru time, jak je popsáno v RFC 868. Komponenta vyžaduje WSOCK32.DLL.
Dříve než můžeme získat čas z Internetovského serveru time, musíme
znát jméno hostitele nebo tečkovou IP adresu hostitele time a přiřadit
tuto hodnotu vlastnosti
Host. Normálně vlastnost Port nemusíme
modifikovat, pokud hostitel nenaslouchá na nestandardním portu. Po nastavení
hostitele čteme pouze hodnotu vlastnosti
TimeStr, a tím získáme
čas ze specifikovaného hostitele.
Komponenta má tyto vlastnosti:
property TimeInt: longint; |
Vlastnost vrací počet sekund od půlnoci 1. 1. 1900. Dříve
než tuto vlastnost můžeme číst, musí být nastavena vlastnost Host
na přípustný server time. |
Public |
Runtime, Readonly |
property TimeStr: string; |
Vlastnost vrací čas ze vzdáleného hostitele jako řetězec.
Dříve než tuto vlastnost můžeme číst, musí být nastavena vlastnost Host
na přípustný server time. |
Public |
Runtime, Readonly |
-
Použití komponenty TNMHTTP si ukážeme ná příkladě. Začneme vývoj
nové aplikace. Na formulář umístíme tyto komponenty: 4x TMemo, TEdit,
TOpenDialog,
TNMHTTP
a 7x TButton. Význam komponent je tento:
-
Memo1 - Zobrazení hlavičky
-
Memo2 - Zobrazení těla
-
Memo3 - Zobrazení stavu
-
Memo4 - Zobrazení Cookie
-
Edit1 - Zadání URL
-
Button1 - Příkaz Get
-
Button2 - Příkaz Head
-
Button3 - Příkaz Options
-
Button4 - Příkaz Trace
-
Button5 - Příkaz Put
-
Button6 - Příkaz Post
-
Button7 - Příkaz Delete
Obsluhy stisku tlačítek vypadají takto:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
NMHTTP1->Get(Edit1->Text);
}
void __fastcall TForm1::Button2Click(TObject
*Sender)
{
NMHTTP1->Head(Edit1->Text);
}
void __fastcall TForm1::Button3Click(TObject
*Sender)
{
NMHTTP1->Options(Edit1->Text);
}
void __fastcall TForm1::Button4Click(TObject
*Sender)
{
AnsiString S;
if(InputQuery("Trace Data Required","Input
data to send as trace",S))
NMHTTP1->Trace(Edit1->Text,
S);
}
void __fastcall TForm1::Button5Click(TObject
*Sender)
{
if (OpenDialog1->Execute())
{
NMHTTP1->OutputFileMode
= TRUE;
NMHTTP1->Put(Edit1->Text,
OpenDialog1->FileName);
NMHTTP1->OutputFileMode
= FALSE;
}
}
void __fastcall TForm1::Button6Click(TObject
*Sender)
{
AnsiString S;
if (InputQuery("Post Data Required",
"Input data to Post", S))
NMHTTP1->Post(Edit1->Text,
S);
}
void __fastcall TForm1::Button7Click(TObject
*Sender)
{
NMHTTP1->Delete(Edit1->Text);
}
Je zapotřebí vytvořit ještě několik obsluhu událostí komponenty TNMHTTP.
Obsluha OnAuthenticationNeeded vypadá takto:
void __fastcall TForm1::NMHTTP1AuthenticationNeeded(TObject
*Sender)
{
AnsiString AnID, APass;
InputQuery("Authentication required",
"Enter a user ID", AnID);
InputQuery("Authentication required",
"Enter a password", APass);
NMHTTP1->HeaderInfo->UserId = AnID;
NMHTTP1->HeaderInfo->Password = APass;
ShowMessage("Authentication information
in place, please retry the previous command");
}
Událost vzniká, když dokument specifikovaný adresou v Edit1
vyžaduje autentizaci. Obsluha OnFailure vypadá takto:
void __fastcall TForm1::NMHTTP1Failure(CmdType
Cmd)
{
Memo1->Text = NMHTTP1->Header;
Memo2->Text = NMHTTP1->Body;
switch(Cmd)
{
case CmdGET:
Memo3->Lines->Add("HTTP GET Failed");
case CmdPOST:
Memo3->Lines->Add("HTTP Post Failed");
case CmdHEAD:
Memo3->Lines->Add("HTTP HEAD Failed");
case CmdOPTIONS:
Memo3->Lines->Add("HTTP OPTIONS Failed");
case CmdTRACE:
Memo3->Lines->Add("HTTP TRACE Failed");
case CmdPUT:
Memo3->Lines->Add("HTTP PUT Failed");
case CmdDELETE:
Memo3->Lines->Add("HTTP Delete Failed");
}
}
Obsluhu OnRedirect tvoří příkaz:
void __fastcall TForm1::NMHTTP1Redirect(bool
&Handled)
{
if (MessageDlg("This site is redirecting
you to another site. Allow redirect?",
mtConfirmation,
TMsgDlgButtons() << mbYes << mbNo, 0) == mrNo)
Handled = TRUE;
}
Poslední obsluha (OnSuccess) vypadá takto:
void __fastcall TForm1::NMHTTP1Success(CmdType
Cmd)
{
if (NMHTTP1->CookieIn != "")
Memo4->Text = NMHTTP1->CookieIn;
Memo1->Text = NMHTTP1->Header;
Memo2->Text = NMHTTP1->Body;
switch(Cmd)
{
case CmdGET:
Memo3->Lines->Add("HTTP GET Successful");
case CmdPOST:
Memo3->Lines->Add("HTTP POST Successful");
case CmdHEAD:
Memo3->Lines->Add("HTTP HEAD Successful");
case CmdOPTIONS:
Memo3->Lines->Add("HTTP OPTIONS Successful");
case CmdTRACE:
Memo3->Lines->Add("HTTP TRACE Successful");
case CmdPUT:
Memo3->Lines->Add("HTTP PUT Successful");
case CmdDELETE:
Memo3->Lines->Add("HTTP DELETE Successful");
}
}
Tím je aplikace hotova. Pokuste se pochopit jak TNMHTTP pracuje.
-
Podívejme se ještě na jeden příklad použití TNMHTTP. Začneme vývoj
nové aplikace a na formulář vložíme 7x TEdit, 3x TMemo, TButton
a TNMHTTP. Význam komponent je tento:
-
Edit1 - Vstup URL
-
Edit2 - Vstup odcházejících Cookie
-
Edit3 - Vstup lokální e-mail adresy
-
Edit4 - Vstup jména lokálního programu
-
Edit5 - Vstup identifikace uživatele
-
Edit6 - Vstup hesla
-
Edit7 - Vstup odkazu
-
Memo1 - Zobrazení hlavičky
-
Memo2 - Zobrazení těla
-
Memo3 - Zobrazení odcházející hlavičky (SendHeader)
-
Button1 - Provedení příkazu Get
Obsluhu stisku tlačítka tvoří:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
NMHTTP1->HeaderInfo->LocalMailAddress
= Edit3->Text;
NMHTTP1->HeaderInfo->LocalProgram
= Edit4->Text;
NMHTTP1->HeaderInfo->Cookie = Edit2->Text;
NMHTTP1->HeaderInfo->Referer = Edit7->Text;
NMHTTP1->HeaderInfo->UserId = Edit5->Text;
NMHTTP1->HeaderInfo->Password = Edit6->Text;
NMHTTP1->InputFileMode = TRUE;
NMHTTP1->Header = ".\head.txt";
NMHTTP1->Body = ".\Body.txt";
NMHTTP1->Get(Edit1->Text);
}
Při stisku tlačítka jsou naplněny vlastnosti HeaderInfo z editačních
ovladačů. Vlastnost InputFileMode je nastavena na true a
tak získaný dokument bude uložen v souborech. Vlastnost Header je
nastavena na soubor head.txt v aktuálním adresáři a vlastnost
Body
na soubor body.txt. Dokument specifikovaný v Edit1 je získán
metodou Get.
Obsluhu události OnAboutToSend komponenty TNMHTTP vypadá
takto:
void __fastcall TForm1::NMHTTP1AboutToSend(TObject
*Sender)
{
NMHTTP1->SendHeader->Values["If-Modified-Since"]
=
"Wed, 09 Sep 1998
10:49:15 GMT";
Memo3->Text = NMHTTP1->SendHeader->Text;
}
Obsluha k odcházející hlavičce přidá prvek If-Modified-Since.
Zbývá ještě obsluha události OnSuccess:
void __fastcall TForm1::NMHTTP1Success(CmdType
Cmd)
{
if (Cmd == CmdGET)
{
Memo1->Lines->LoadFromFile(".\head.txt");
Memo2->Lines->LoadFromFile(".\Body.txt");
}
}
Aplikaci si prostupujte.
-
Již hotovou aplikaci používající komponentu TNMHTTP nalezneme v
adresáři Program Files\Borland\CBuilder\Examples\Interner\Http.
Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
-
Použití komponet TNMMsg a TNMMsgServ si ukážeme na příkladě.
Začneme vývoj nové aplikace a na formulář umístíme komponenty: 2x TEdit,
2x TMemo, TNMMsg a TNMMsgServ. Nastavíme vlastnost
Host
komponenty TNMMsg na 127.0.0.1. Je to IP adresa pro lokálního hostitele.
Pokud budeme chtít později otestovat tuto aplikaci mezi počítači, pak nastavíme
vlastnost Host na IP adresu počítače se kterým chceme komunikovat.
Obsluha události OnKeyPress prvního editačního ovladače je tvořena:
void __fastcall TForm1::Edit1KeyPress(TObject
*Sender, char &Key)
{
if (Key == 0x0D)
{
NMMsg1->FromName
= Edit2->Text;
NMMsg1->PostIt(Edit1->Text);
}
}
Když stiskneme klávesu Enter, pak vlastnost FromName TNMMsg
nastavíme na hodnotu druhého editačního ovladače a zpráva zadaná do prvního
editačního ovladače je odeslána na vzdáleného hostitele pomocí metody PostIt.
Komponenta TNMMsg má ještě obsluhu události OnMessageSent:
void __fastcall TForm1::NMMsg1MessageSent(TObject
*Sender)
{
Memo2->Lines->Add("Message Sent");
}
Komponenta TNMMsgServ má pouze obsluhu OnMSG. Když je
přijata zpráva, pak je přidána do Memo1 a do Memo2 je přidána
informace od koho zpráva pochází.
void __fastcall TForm1::NMMSGServ1MSG(TComponent
*Sender,
const AnsiString
sFrom, const AnsiString sMsg)
{
Memo2->Lines->Add("Incoming message
from "+sFrom);
Memo1->Lines->Add("["+sFrom+"] "+sMsg);
}
Po spuštění aplikace, zapíšeme svoje jméno do Edit2. Naši zprávu
zapíšeme do Edit1 a stiskneme Enter. Zpráva bude zobrazena v Memo1.
-
Již hotovou aplikaci používající tyto komponenty nalezneme v adresáři Program
Files\Borland\CBuilder\Examples\Interner\MsgDemo. Prohlédněte si tuto
aplikaci a snažte se pochopit, jak pracuje.
-
S komponentou TNMNNTP se seznámíme v této aplikaci. Začneme vývoj
nové aplikace a na formulář umístíme tyto komponenty. 5x TEdit,
3x TButton, 2x TListBox, TMemo, TOpenDialog,
TStatusBar
a TNMNNTP. Význam komponent je tento:
-
Edit1 - Identifikace uživatele (je-li požadována autentizace)
-
Edit2 - Heslo (je-li požadována autentizace)
-
Edit3 - Hostitel nebo IP adresa
-
Edit4 - Adresa odesilatele článku
-
Edit5 - Řádek "Subject" článku
-
Button1 - Připojit/odpojit
-
Button2 - Přidej připojený soubor.
-
Button3 - Odešli článek
-
Memo1 - Tělo článku
-
ListBox1 - Seznam diskusních skupin
-
ListBox2 - Seznam připojených souborů
Obsluha stisku prvního tlačítka je tvořena příkazy:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
if (NMNNTP1->Connected)
NMNNTP12->Disconnect()
else
{
if (Edit1->Text
!= "")
{
NMNNTP1->UserID = Edit1->Text;
NMNNTP1->Password = Edit2->Text;
}
NMNNTP1->Host
= Edit3->Text;
NMNNTP1->Connect();
}
}
Obsluhu OnConnect komponenty TNMNNTP tvoří:
void __fastcall TForm1::NMNNTP1Connect(TObject
*Sender)
{
StatusBar1->SimpleText = "Connected";
NMNNTP1->GetGroupList();
}
Po zřízení připojení je o tom informován uživatel na stavovém řádku.
Dále je metodou GetGroupList získán seznamu diskusních skupin z
hostitele na kterého jsme připojeni. Seznam je vložen do ListBox1.
Obsluhu OnClick komponenty ListBox1 tvoří příkazy:
void __fastcall TForm1::ListBox1Click(TObject
*Sender)
{
if (ListBox1->ItemIndex != -1)
{
ListBox2->Clear();
NMNNTP1->SetGroup(ListBox1->Items[ListBox1->ItemIndex]);
Caption = "Reading - "+NMNNTP1->SelectedGroup+"
Lo: "
+IntToStr(NMNNTP1->LoMessage)+"
Hi: "+IntToStr(NMNNTP1->HiMessage);
}
}
Když myší klikneme v tomto seznamu, pak vybraný prvek seznamu je předán
metodě SetGroup k nastavení současné diskusní skupiny na vybranou
skupinu. Obsluhu události OnGroupSelect komponenty TNMNNTP
tvoří:
void __fastcall TForm1::NMNNTP1GroupSelect(TObject
*Sender)
{
Caption = "Posting - "+NMNNTP1->SelectedGroup;
if (NMNNTP1->Posting)
Caption = Caption + "(Posting
allowed)";
else
Caption = Caption + "(Posting
prohibited)";
}
Když je vybrána nová skupina vzniká událost OnGroupSelect. Titulek
aplikace je nastaven na zobrazení vlastnosti SelectedGroup plus
informace o možnosti odesílat do současné skupiny. Obsluhu události OnGroupListUpdate
stejné komponenty tvoří:
void __fastcall TForm1::NMNNTP1GroupListUpdate(AnsiString
name;
int FirstArticle,
LastArticle; bool Posting)
{
ListBox1->Items->Add(name);
}
Když je získán seznam diskusních skupin, pak tato událost je volána
pro každou skupinu v seznamu. Obsluhu OnDisconnect tvoří:
void __fastcall TForm1::NMNNTP1Disconnect(TObject
*Sender)
{
StatusBar1->SimpleText = "Disconnected";
}
Obsluhu stisku druhého tlačítka tvoří:
void __fastcall TForm1::Button2Click(TObject
*Sender)
{
if (OpenDialog1->Execute())
ListBox2->Items->Add(OpenDialog1->FileName);
}
Když toto tlačítko stiskneme, pak můžeme v dialogovém okně otevírání
souboru vybrat soubor, který je přidán do ListBox2. Obsluhu stisku
třetího tlačítka tvoří:
void __fastcall TForm1::Button3Click(TObject
*Sender)
{
NMNNTP1->PostAttachments->Text = ListBox2->Items->Text;
NMNNTP1->PostBody->Text = Memo1->Text;
NMNNTP1->PostRecord->PrFromAddress
= Edit4->Text;
NMNNTP1->PostRecord->PrReplyTo = Edit4->Text;
NMNNTP1->PostRecord->PrSubject = Edit5->Text;
NMNNTP1->PostRecord->PrAppName = "Netmasters
Example News Posting";
NMNNTP1->PostRecord->PrNewsGroups
= NMNNTP1->SelectedGroup;
NMNNTP1->PostHeader->Values["Organization"]
= "Our Organization";
NMNNTP1->PostArticle();
}
Při stisku třetího tlačítka, vlastnost PostAttachments je nastavena
na seznam zobrazený v ListBox2. Vlastnost PostBody je nastavena
na text zadaný do Memo1 a je zaplněna vlastnost PostRecord.
Vlastnost PostHeader má přidanou hodnotu nazvanou Organization
pro specifikaci organizace odesilatele a pro odeslání článku je volána
metoda PostArticle. Obsluhy OnPosted a OnPostFailed
jsou tvořeny:
void __fastcall TForm1::NMNNTP1Posted(TObject
*Sender)
{
StatusBar1->SimpleText = "Article
Posted Successfully";
}
void __fastcall TForm1.NMNNTP1PostFailed(TComponent
*Sender;
word
Errno; AnsiString Errmsg)
{
ShowMessage("Posting Failed: "+Errmsg+"
Error number "+IntToStr(Errno));
}
Komponenta TNMNNTP má ještě několik obsluh událostí:
void __fastcall TForm1::NMNNTP1GroupSelectRequired(&bool
Handled)
{
AnsiString S;
if (InputQuery("Group selection required",
"Enter the name of a group:", S))
{
NMNNTP1->SetGroup(S);
Handled =
TRUE;
}
}
void __fastcall TForm1.NMNNTP1AuthenticationFailed(Sender:
TObject);
{
ShowMessage("Authentication failed");
}
void __fastcall TForm1::NMNNTP1AuthenticationNeeded(bool
&Handled)
{
AnsiString AnID, APass;
if (NMNNTP1->UserID = "")
if (InputQuery("Authentication
Required", "Enter User ID", AnID))
{
NMNNTP1->UserId = AnID;
Handled = TRUE;
}
if (NMNNTP1->Password = "")
if (InputQuery("Authentication
Required", "Enter Password", APass))
{
NMNNTP1->Password = APass;
Handled = TRUE;
}
}
Událost OnGroupSelectRequired je volána, když při odesílání
článku není vybrána diskusní skupina. Další dvě obsluhy nepotřebují vysvětlení.
Aplikaci si prostudujte.
-
Začneme vývoj nové aplikace. Na formulář umístíme 4x TEdit, 7x Button,
3x TMemo, 2x TListBox, 2x TLabel, TCheckBox,
TStatusBar
a TNMNNTP. Komponenty mají tento význam:
-
Edit1 - Hostitel nebo IP adresa
-
Edit2 - Odesílatel článku
-
Edit3 - Subjekt článku
-
Edit4 - Datum a čas odeslání článku
-
Button1 - Připojení/odpojení
-
Button2 - Získání článku
-
Button3 - Získání těla článku
-
Button4 - Získání hlavičky článku
-
Button5 - Získání seznamu (hlaviček) článků
-
Button6 - Zrušení současné operace
-
Button7 - Změna cesty připojených souborů
-
Memo1 - Seznam připojených souborů
-
Memo2 - Hlavička článku
-
Memo3 - Tělo článku
-
ListBox1 - Seznam diskusních skupin
-
ListBox2 - Seznam článků
-
CheckBox1 - Rozkládat připojené soubory
-
Label1 - Zobrazení cesty připojených souborů
-
Label2 - Číslo současného článku
Do jednotky vložíme hlavičkový soubor filectrl.h. Obsluha stisku
prvního tlačítka a několik datších obsluh vypadá takto:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
if (NMNNTP1->Connected)
NMNNTP1.Disconnect();
else
{
NMNNTP1->Host
= Edit1->Text;
NMNNTP1->Connect();
}
}
void __fastcall TForm1::NMNNTP1Connect(TObject
*Sender)
{
int I;
StatusBar1->SimpleText = "Connected";
NMNNTP1->GetGroupList();
for (I = 0; I <= (NMNNTP1->GroupList->Count
-1); I++)
ListBox1->Items->Add(NthWord(NMNNTP1->GroupList->Strings[I],
' ', 1));
}
void __fastcall TForm1::ListBox1Click(TObject
*Sender)
{
if (ListBox1->ItemIndex != -1)
{
ListBox2->Clear();
NMNNTP1->SetGroup(ListBox1->Items[ListBox1->ItemIndex]);
Caption = "Reading - "+NMNNTP1->SelectedGroup+
" Lo: "+IntToStr(NMNNTP1->LoMessage)+"
Hi: "+IntToStr(NMNNTP1->HiMessage);
}
}
void __fastcall TForm1::NMNNTP1Disconnect(TObject
*Sender)
{
StatusBar1->SimpleText = "Disconnected";
}
Tyto obsluhy nepotřebují vysvětlení. Obsluhu události stisku pátého
tlačítka tvoří:
void __fastcall TForm1::Button5Click(TObject
*Sender)
{
NMNNTP1->GetArticleList(true, 0);
}
Metoda GetArticleList získává seznam článků současné diskusní
skupiny. Jelikož první parametr má hodnotu true jsou získány v seznamu
všechny články. Obsluhu události OnHeaderList tvoří (je volána pro
každou hlavičku v seznamu):
void __fastcall TForm1::NMNNTP1HeaderList(TObject
*Sender)
{
ListBox2->Items->Add("["+IntToStr(NMNNTP1->HeaderRecord->PrArticleId)+"]Subject:
"
+NMNNTP1->HeaderRecord->PrSubject);
}
Následujících několik obsluh opět nepotřebuje vysvětlení:
void __fastcall TForm1::Button6Click(TObject
*Sender)
{
NMNNTP1->Abort();
}
void __fastcall TForm1::NMNNTP1Abort(TObject
*Sender)
{
ShowMessage("Aborted");
}
void __fastcall TForm1::Button7Click(TObject
*Sender)
{
AnsiStirng S;
if (SelectDirectory(S, TSelectDirOpts()
<< sdAllowCreate << sdPerformCreate << sdPrompt, 0))
{
Label1->Caption
= S;
NMNNTP1->AttachFilePath
= S;
}
}
void __fastcall TForm1::CheckBox1Click(TObject
*Sender)
{
if (CheckBox1->Checked)
NMNNTP1->ParseAttachments
= TRUE;
else
NMNNTP1->ParseAttachments
= FALSE;
}
void __fastcall TForm1::Button4Click(TObject
*Sender)
{
AnsiString S;
int I;
if (InputQuery("Retrieve article header",
"Which article header to retrieve", S)
{
I = StrToIntDef(S,
-1);
if (I != -1)
NMNNTP1->GetArticleHeader(I);
}
}
void __fastcall TForm1::NMNNTP1Header(TObject
*Sender)
{
Memo2->Text = NMNNTP1->Header->Text;
Edit2->Text = NMNNTP1->HeaderRecord->PrFromAddress;
Edit3->Text = NMNNTP1->HeaderRecord->PrSubject;
Edit4->Text = NMNNTP1->HeaderRecord->PrTimeDate;
}
void __fastcall TForm1::Button2Click(TObject
*Sender)
{
AnsiString S;
int I;
if (InputQuery("Retrieve article",
"Which article to retrieve", S))
{
I = StrToIntDef(S,
-1);
if (I != -1)
NMNNTP1->GetArticle(I);
}
}
void __fastcall TForm1::NMNNTP1InvalidArticle(TObject
*Sender)
{
ShowMessage("Invalid article number");
}
void __fastcall TForm1::Button3Click(TObject
*Sender)
{
AnsiString S;
int I;
if (InputQuery("Retrieve article body",
"Which article body to retrieve", S))
{
I = StrToIntDef(S,
-1);
if (I != -1)
NMNNTP1->GetArticleBody(I);
}
}
void __fastcall TForm1::NMNNTP1Article(TObject
*Sender)
{
Memo3->Text = NMNNTP1->Body->Text;
Memo2->Text = NMNNTP1->Header->Text;
Memo1->Text = NMNNTP1->Attachments->Text;
Edit2->Text = NMNNTP1->HeaderRecord->PrFromAddress;
Edit3->Text = NMNNTP1->HeaderRecord->PrSubject;
Edit4->Text = NMNNTP1->HeaderRecord->PrTimeDate;
Label2->Caption = IntToStr(NMNNTP1->CurrentArticle);
}
void __fastcall TForm1::NMNNTP1Body(TObject
*Sender)
{
Memo2->Text = NMNNTP1->Body->Text;
Memo1->Text = NMNNTP1->Attachments->Text;
}
void __fastcall TForm1::NMNNTP1GroupSelectRequired(bool
&Handled)
{
AnsiString S;
if (InputQuery("Group selection required",
"Newsgroup: ", S))
{
NMNNTP1->SetGroup(S);
Handled =
TRUE;
}
}
Aplikace je hotova, pokuste se pochopit jak pracuje.
-
Již hotovou aplikaci používající komponentu TNMNNTP nalezneme v
adresáři Program Files\Borland\CBuilder\Examples\Interner\Nntp.
Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
-
S použitím komponenty TNMTime se seznáme v další aplikací. Začneme
vývoj nové aplikace a na formulář umístíme TNMTime, 2x TEdit
a TButton. Obsluhu stisku tlačítka tvoří:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
NMTime1->Host = "tmc.edu";
NMTime1->Timeout = 5000;
Edit1->Text = NMTime1->TimeStr;
Edit2->Text = IntToStr(NMTime1->TimeInt);
}
Při stisku tlačítka je vlastnost Host nastavena na tmc.edu,
což je přípustný server času. Vlastnost Timeout je nastavena na
5 sekend. Editační ovladače zobrazí vlastnosti TimeStr a TimeInt.
-
Již hotovou aplikaci používající komponentu TNMTime nalezneme v
adresáři Program Files\Borland\CBuilder\Examples\Interner\Time.
Prohlédněte si tuto aplikaci a snažte se pochopit, jak pracuje.
   |
12. Komponenty NetMasters II
|