ViewPoint Manual

Sample Custom Status Server
ViewPoint Manual426801-001
D-13
Custom Server Code
BEGIN
-------------------------------------------------------------------------------
--
-- Perform the processing necessary to perform the request contained in
-- 'RequestBuffer'. Formulate a reply in 'ReplyBuffer'.
--
-------------------------------------------------------------------------------
INT .EXT Request^Header ( Zvpt^Request^Header^Def ) = Request^Buffer;
INT .EXT Reply^Header ( Zvpt^Reply^Header^Def ) = Reply^Buffer;
INT .EXT Sub^Request^Buffer := @Request^Buffer[Len^Wsz(Zvpt^Request^Header^Def)];
INT .EXT Sub^Reply^Buffer := @Reply^Buffer[Len^Wsz(Zvpt^Reply^Header^Def)];
INT Sub^Request^Len;
INT Sub^Reply^Len := 0;
INT Request^Code := Request^Header.Z^Request^code;
INT Error := 0;
Return^Error := 0;
Return^Error^Detail := 0;
Sub^Request^Len := Request^Len - Len^Bsz ( Zvpt^Request^Header^Def );
Sub^Reply^Len := 0;
IF Sub^Request^Len < 0 THEN Return^Error := ( Zerr^Stat^Collect^Request )
ELSE
BEGIN
CASE Request^code OF
BEGIN
Z^Get^Version^Code -> ;
Z^Scan^Item^Code -> Return^Error := Scan^Item ( Sub^Request^Buffer,
Sub^Request^Len,
Sub^Reply^Buffer,
Sub^Reply^Len);
Z^Next^Item^Code -> Return^Error := Scan^Next^Item ( Sub^Request^Buffer,
Sub^Request^Len,
Sub^Reply^Buffer,
Sub^Reply^Len );
Z^Check^Item^Code -> Return^Error := Check^Item ( Sub^Request^Buffer,
Sub^Request^Len,
Sub^Reply^Buffer,
Sub^Reply^Len );
Z^Sample^Item^Code -> Return^Error := Sample^Item ( Sub^Request^Buffer,
Sub^Request^Len,
Sub^Reply^Buffer,
Sub^Reply^Len );
OTHERWISE -> Return^Error := Zerr^Stat^Collect^Request;
END; -- case.
END; -- Begin case.
IF Return^Error = 0 THEN
Reply^Header.Z^Ipc^Hdr.Z^Pw^Reply^Code := 0
ELSE
BEGIN
Reply^Header.Z^Ipc^Hdr.Z^Ipc^Retn^Code := Return^Error;
Reply^Header.Z^Ipc^Hdr.Z^Ipc^Retn^Code^Detail := Return^Error^Detail;
Reply^Header.Z^Ipc^Hdr.Z^Pw^Reply^Code := 3;
END; -- error caught.
Reply^Header.Z^Ipc^Hdr.Z^Version^Code ':=' [Current^Version];
Reply^Len := Sub^Reply^Len + Len^Bsz ( Reply^Header );
END; ! Server^Perform^Request.
?PAGE "READ RECEIVE MESSAGE"
PROC Read^Receive^Message ( Buffer, Actual^Length, Status ) VARIABLE;
INT .Buffer; ! OUTPUT: The message is returned here.
! The buffer should be at least
! 'Max^Request + 1' bytes long.
INT .Actual^Length; ! OUTPUT: Actual length of message returned.
INT .Status; ! OUTPUT: Type of message read. One of:
! Recv^User^Msg = 0
! Recv^System^Msg^From^User = 1
! Recv^System^Msg^From^System = 2
! Recv^End^Of^File = 3.
BEGIN
-------------------------------------------------------------------------------
--
-- This procedure will read one message from $RECEIVE. It will then
-- verify if it is a system message and if so will check for OPEN messages
-- and CLOSE messages to update the Num^Requesters counter. If this is any
-- other system message we do not do anything with them. If it is a user
-- message we will set the Status variable to 1.