Příkaz WaitFor


Syntaxe:
WaitFor End
WaitFor EmptyLine
WaitFor LineStarting
Řetězec
WaitFor ExactMatch Řetězec

Program přijímá od partnerského subjektu spojení opakovaně řetězce znaků ukončené prvním (nejbližším) výskytem znaku nl (newline, ASCII hodnota 10). Pokud již spojení ukončil některý z předchozích příkazů, bylo ztraceno či ukončeno partnerským subjektem nebo nebylo vůbec navázáno, příkaz zahlásí chybu a ukončí všechny rozpracované scripty. K hlášení chyby a ukončení scriptů vede příkaz rovněž v případě, že ke ztrátě spojení či ukončení spojení partnerským subjektem dojde dříve, než některý z přijatých řetězců splní požadovanou podmínku (netýká se varianty WaitFor End). Příkaz načte každý řetězec včetně znaku nl (další event. příkazy pro čtení pokračují za tímto znakem). Délka každého řetězce je omezena počtem 4096 - pokud do tohoto počtu není přijat znak nl, příkaz zahlásí chybu a ukončí všechny rozpracované scripty.
Jednotlivé varianty se navzájem liší koncovou podmínkou, kterou musí naposledy načtený řetězec splňovat, aby se příkaz úspěčně ukončil a pokračovalo se dalším příkazem interpretovaného scriptu. Načítání skončí v případě, že naposledy načtený řetězec:
  • End - ... se nepodařilo úspěšně načíst, typicky partnerský subjekt ukončil spojení nebo bylo spojení přerušeno. Vedlejším efektem této varianty příkazu je uzavření spojení (není již třeba provádět Disconnect).
  • EmptyLine - ... je prázdný (s nulovou délkou). K řetězci se nepočítají znaky cr , které někdy mohou bezprostředně předcházet znak konce řádky nl (leckdy i ve více exemplářích).
  • LineStarting - ... začíná uvedeným řetězcem-parametrem.
  • ExactMatch - ... je přesně shodný s uvedeným řetězcem-parametrem. K řetězci se nepočítají znaky cr , které někdy mohou bezprostředně předcházet znak konce řádky nl (leckdy i ve více exemplářích).
    V obou posledních příkazech musí být shoda včetně velkých a malých písmen a řetězec-argument musí být alespoň jednoznakový.
    Pro každé jednotlivé čtení řetězce platí, že příkaz v ideálním případě nalezne znaky již přijaté ve vstupní frontě spojení, takže je pouze převezme a ihned se vrátí. Pokud partnerský subjekt dosud neodeslal žádný znak nl, čeká příkaz nejprve na jeho přijetí do vstupní fronty. Nikdy se netestují částečně přijaté řetězce.
    Pokud je příkaz úspěšně proveden, naplní čistou hodnotou posledního řetězce (bez ukončovacího znaku !) systémovou proměnnou line (po příkazu WaitFor LineStarting "220" a přijetí libovolného počtu řetězců nezačínajích znaky "220" a řetězce "220 Ready\n" bude mít line délku 9 znaků a hodnotu "220 Ready"). Tato systémová proměnná pak může být použita jako součást řetězců (viz také).
    V případě úspěšného načtení každého přijatého řetězce, je-li současně aktivní některý příkaz OutputFile, je řetězec v úplné délce (včetně znaku nl) zapsán do výstupního souboru (v našem příkladě se do souboru zapíše všech přijatých 10 znaků "220 Ready\n").
    Typickým použitím příkazu je načtení headeru e-mailového dopisu nebo dokumentu žádaného a posílaného protokolem http (ve tvaru WaitFor EmptyLine), čekání na odpověď ftp-serveru, kdy před řádkou začínající "220 " může být libovolný počet řádek začínajících "220-" apod. (ve tvaru WaitFor LineStarting "220 ") nebo čekání na konec těla dopisu v protokolu smtp (ve tvaru WaitFor ExactMatch ".").
    Příklady:
    	WaitFor End
    	WaitFor EmptyLine
    	WaitFor LineStarting "Content-Type: "
    	WaitFor LineStarting "250 "
    	WaitFor ExactMatch "."