ViewPoint Manual

Sample Custom Status Server
ViewPoint Manual426801-001
D-14
Custom Server Code
--
-------------------------------------------------------------------------------
INT Error := 0;
LITERAL System^Message = 6;
CALL READUPDATE ( Rcv^Fnum, Buffer, Zvpt^Ipc^Len, Actual^Length );
IF > THEN
BEGIN
CALL Fileinfo ( Rcv^Fnum, Error );
IF Error = System^Message
THEN
BEGIN
CASE $ABS ( Buffer[0] ) - 30 OF
BEGIN
!0! Num^Requesters := Num^Requesters + 1; ! -30 Open Msg from Requester
!1! Num^Requesters := Num^Requesters - 1; ! -31 Close Msg from Requester
OTHERWISE;
END; !End of Case
END !End of System^Message
END !End of IF > THEN
ELSE IF Error <> 0 THEN CALL ABEND;
IF Error = 0 THEN Status := Recv^User^Msg
ELSE IF ( Error = 6 AND Num^Requesters = 0 ) THEN Status:= Recv^End^of^file
ELSE IF ( Error = 6 AND Num^Requesters > 0 )
THEN Status := Recv^System^Msg^From^User;
END; ! PROC Read^Receive^Message
?PAGE "REPLY^RECEIVE^MESSAGE"
PROC Reply^Receive^Message ( Buffer, Length ) VARIABLE;
INT .Buffer; ! INPUT,OPTIONAL: Text of the reply. Omit
! only if 'Length' is zero.
INT Length; ! INPUT,OPTIONAL: Length of the reply, in
! bytes. Default is zero.
BEGIN
-------------------------------------------------------------------------------!
--
-- This procedure will reply to a $RECEIVE message that was read by !
-- 'Read^Receive^Message'. !
--
-------------------------------------------------------------------------------!
IF NOT $PARAM ( Buffer ) THEN @Buffer := 0;
IF NOT $PARAM ( Length ) THEN Length := 0;
CALL REPLY ( Buffer, Length );
END; ! PROC Reply^Receive^Message
?PAGE "SERVER PROCESSING"
PROC Server^Processing;
BEGIN
-------------------------------------------------------------------------------
--
-- This routine is called after all initialization is complete.
-- It will execute the server's main processing loop.
--
-- The implementation of this routine is appropriate for servers
-- that are single-threaded and are never interested in processing
-- system messages. For each user request, 'Server^PerformRequest'
-- is called to execute the request.
--
-------------------------------------------------------------------------------
INT .Request^Buf [0:Zvpt^Ipc^Len]; ! Request buffer
INT .Reply^Buf [0:Zvpt^Ipc^Len]; ! Reply buffer
INT Request^Len; ! Length of request
INT Reply^Len; ! Length of reply
INT Status; ! Status parameters of Read^Receive^Message
WHILE 1 DO
BEGIN
CALL Read^Receive^Message ( Request^Buf, Request^Len, Status );
IF Status = Recv^User^Msg THEN
CALL Server^Perform^Request ( Request^Buf, Request^Len,
Reply^Buf, Reply^Len )
ELSE IF Status = Recv^System^Msg^From^User THEN Reply^Len := 0
ELSE IF Status = Recv^End^Of^File THEN RETURN;
CALL Reply^Receive^Message ( Reply^Buf, Reply^Len );
END;
END; ! PROC Server^Processing
?PAGE "STATUS SERVER PRODUCT VERSION PROCEDURE T2001C00^03FEB88"
PROC T2001C00^03FEB88;