Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XWBCAGNT

XWBCAGNT.m

Go to the documentation of this file.
  1. XWBCAGNT ;ISC-SF/EG,RWF - Connect to Remote TCP Client Agent ;2/12/98 16:15<<= NOT VERIFIED > [ 04/02/2003 8:48 AM ]
  1. ;;1.1;RPC BROKER;**1001**;APR 1, 2003
  1. ;;1.1;RPC BROKER;**2**;Mar 28, 1997
  1. Q
  1. ;
  1. CMD(XWBRET,QUES,PARAM) ;Call daemon and get responce <e.f.>
  1. N IPA,SOCK S XWBRET="",IPA=$G(IO("IP")),SOCK=9200 Q:IPA="" 0
  1. I $G(IO)="" D HOME^%ZIS
  1. D CALL^%ZISTCP(IPA,SOCK,3) I POP Q 0
  1. D SEND(QUES,$G(PARAM)),REC(.XWBRET)
  1. D CLOSE^%ZISTCP
  1. Q 1
  1. ;
  1. OPEN(IP,SKT) ; - connect to remote <extrinsic function>
  1. D HOME^%ZIS:'$D(IO(0)),SAVDEV^%ZISUTL("XWBCAGENT HOME")
  1. D CALL^%ZISTCP(IP,SKT,3)
  1. Q
  1. ;
  1. SEND(S,P) ; - send message <procedure>
  1. N $ETRAP S $ETRAP="S $EC="""" Q"
  1. S S=$$SETMSG(S,$G(P))
  1. U IO W S,!
  1. Q
  1. ;
  1. REC(BODY) ; - receive message <extrinsic function>
  1. N LEN,Y
  1. U IO S BODY("HDR")="~",BODY("HDR")=$$SREAD(5) ; -- get header
  1. Q:BODY("HDR")'="{XWB}" ; -- quit if no responce
  1. S LEN=$$SREAD(5),BODY("ID")=$$SREAD(+LEN) ; -- get PID
  1. S LEN=$$SREAD(5),BODY(0)=$$SREAD(+LEN) ; -- get rpc name
  1. S LEN=$$SREAD(5) D:+LEN BREAD(+LEN,.BODY) ; -- get rpc parameter
  1. S LEN=$$SREAD(1) ; -- read terminator
  1. Q
  1. ;
  1. SETMSG(S,PAR) ; - format message <extrinsic function>
  1. N L,F,PID
  1. IF ('$D(S))!('$D(PAR)) Q ""
  1. S F=100000
  1. S PID=$J
  1. S L=$L(PID)
  1. S PID=$E(F+L,2,6)_PID
  1. S L=$L(S),S=$E(F+L,2,6)_S
  1. S L=$L(PAR),PAR=$E(F+L,2,6)_PAR
  1. Q "{XWB}"_PID_S_PAR_$C(23)
  1. ;
  1. CLOSE ; - close device <procedure>
  1. D CLOSE^%ZISTCP,USE^%ZISUTL("XWBCAGENT HOME"),RMDEV^%ZISUTL("XWBCAGENT HOME")
  1. Q
  1. ;
  1. BREAD(L,B) ;read tcp buffer, L is length <extrinsic function>
  1. N E,X,T,DONE,XWBTIME,Y,IX,$ETRAP S $ETRAP="S $EC="""" Q"
  1. S (T,E,DONE)=0,XWBTIME=10,IX=1,B=L,L=$S(L<256:L,1:128) Q:L'>0 ""
  1. BR2 R X#L:XWBTIME
  1. S E=X
  1. IF $L(E)<L F D Q:DONE
  1. . IF $L(E)=L S DONE=1 Q
  1. . R X#(L-$L(E)):XWBTIME
  1. . S E=E_X
  1. S B(IX)=E,T=T+$L(E)
  1. I T'=B S L=$S(B-T>255:128,1:B-T),IX=IX+1 G BR2
  1. Q
  1. ;
  1. SREAD(L) ;read short tcp buffer, L is length <extrinsic function>
  1. N C,E,X,DONE,XWBTIME,$ETRAP S $ETRAP="S $EC="""" Q """""
  1. S (C,E,DONE)=0,XWBTIME=10 Q:L'>0 ""
  1. R X#L:XWBTIME
  1. S E=X IF $L(E)<L R X#(L-$L(E)):XWBTIME S E=E_X
  1. Q E
  1. ;