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) }

{ (c) Š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