Ako na sieťové funkcie [IV] Zasielanie správ

1. 5. 1998

Sdílet

V predchádzajúcom článku o funkciách Novell NetWare (testované na verzii 3.11) sme si ukázali spôsob zistenia podr...





V predchádzajúcom článku o funkciách Novell NetWare (testované na

verzii 3.11) sme si ukázali spôsob zistenia podrobných informácií

o objekte. Ďalšou funkciou bude posielanie správ jednotlivým

prihláseným objektom, ktorú určite využijete vo svojich sieťových

programoch.

Posielanie správ v sieti NetWare zabezpečuje služba E1h a funkcia

00h. Pri volaní tejto služby musíme poznať číslo spojenia

objektu, ktorému chceme správu posielať. Správa je textový

reťazec, ktorý obsahuje bežne zobraziteľné znaky. Jej dĺžka môže

byť maximálne 55 znakov. Pri vstupnom bufri sa zastavím pri dvoch

údajoch (ostatné je dúfam jasné z programu a jeho popisu). Do

položky COUNT udávame počet objektov ktorým chceme správu poslať.

COUNT by mal mať minimálnu hodnotu 1. Ak má COUNT hodnotu vätšiu

ako 1, musí sa zmeniť typ položky LIST. Táto totiž obsahuje

zoznam čísiel spojenia objektov, na ktoré chceme správu poslať.

Preto ak COUNT > 1, LIST bude typu ARRAY[1..COUNT] OF BYTE.



Napríklad:

Ak COUNT je 1 – LIST: BYTE;

Ak COUNT ne vätšia ako 1 – LIST: ARRAY[1..COUNT] OF BYTE



Obdobne je to aj vo výstupnom bufri pri položkách ERRCOUNT

a ERRLIST. Po vykonaní prerušenia máme v ERRCOUNT počet chybne

poslaných správ a v položke ERRLIST zoznam čísiel chýb pre

jednotlivé čísla spojenia (ak je COUNT viac ako 1). Typ ERRLIST

sa mení podľa veľkosti COUNT, ako je to u položky LIST vstupného

bufru. Podrobný komentár k programu je súčasťou zdrojového

programu.



Pozn. red.: Sérii článků Ako na sieťové funkcie naleznete v

úplné podobě na našem Webu na adrese XXXXXXXXXXXXXXXXXXXXXX.







***********



Program Send;



{ posiela správu prihlásenému }



{ objektu (Novell NetWare 3.11) }



{ © Štefan Stieranka }







uses Dos;







type



TInpBuf = record



{ dĺžka vstupného bufru }



LenBuf: Integer;



{ číslo funkcie }



FuncNum: Byte;



{ počet staníc }



Count: Byte;



{ číslo stanice (zoznam) }



List: Byte;



{ dĺžka správy }



MsgLength: Byte;



{ správa }



Msg: Array[1..55] of Byte;



end;







TOutBuf = record



{ dĺžka výstupného bufru }



LenBuf: Integer;



{ počet chýb }



ErrCount: Byte;



{ výsledný kód zasielania správy }



ErrList: Byte;



end;







var



InpBuf: TInpBuf;



OutBuf: TOutBuf;



Stat, Res: Integer;



Msg: String;







Procedure SendMsg(Station: Integer;



Message: String; var Result: Integer);



{ posiela správu užívatelovi



podla stanice prihlásenia }



var



Reg: Registers;



I: Integer;



begin



{ max. dĺžka spr¦vy – 55 znakov }



If Length(Message) > 55 then



Message := Copy(Message,1,55);



With InpBuf do



begin



LenBuf := 59;



{ 00h – pošli správu }



FuncNum := $00;



Count := 1;



List := Station;



FillChar(Msg, SizeOf(Msg), $0);



{ dĺžka správy }



MsgLength := Length(Message);



For I := 1 to Length(Message) do



Msg[I] := Ord(Message[I]);



end;



With OutBuf do



begin



LenBuf := 2;



ErrCount := 1;



ErrList := 0;



end;



{ číslo služby }



Reg.AH := $E1;



Reg.DS := Seg(InpBuf);



Reg.SI := Ofs(InpBuf);



Reg.ES := Seg(OutBuf);



Reg.DI := Ofs(OutBuf);



MsDos(Reg);



{ výsledok }



Result := OutBuf.ErrList;





end;







begin



Write(‚Text správy: ');



Readln(Msg);



Write('Pre stanicu: ');



Readln(Stat);



SendMsg(Stat, Msg, Res);



If Res <> 0 then



Writeln('Chyba posielania správy !‘);



end.





 

Autor článku