| 1 | XWBRL ;OIFO-Oakland/REM - M2M Link Methods ;05/31/2005  15:13
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28,34**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;p34 -make sure that XWBOS is define - WRITE.
 | 
|---|
| 7 |  ;    -modified code to support the new meaning of $X in Cache 
 | 
|---|
| 8 |  ;     5.x - WRITE.
 | 
|---|
| 9 |  ;    -removed intervening lines that call WBF - WRITE.
 | 
|---|
| 10 |  ;    -added code to include option for GTM - WBF.
 | 
|---|
| 11 |  ;    -add line for XWBTCPM to read by Wally's non-call back service.
 | 
|---|
| 12 |  ; 
 | 
|---|
| 13 |  ; ---------------------------------------------------------------------
 | 
|---|
| 14 |  ;                    Methods for Read from and to TCP/IP Socket
 | 
|---|
| 15 |  ; ---------------------------------------------------------------------
 | 
|---|
| 16 | READ(XWBROOT,XWBREAD,XWBTO,XWBFIRST,XWBSTOP) ;
 | 
|---|
| 17 |  NEW X,EOT,OUT,STR,LINE,PIECES,DONE,TOFLAG,XWBCNT,XWBLEN
 | 
|---|
| 18 |  SET STR="",EOT=$C(4),DONE=0,LINE=0
 | 
|---|
| 19 |  ;From XWBTCPM startup, One time thing *p34
 | 
|---|
| 20 |  I $D(XWBRBUF)=1 S STR=XWBRBUF,XWBTO=0,XWBFIRST=0 K XWBRBUF
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ; -- READ needs work for length checking ; This needs work!!
 | 
|---|
| 23 |  FOR  READ XWBX#XWBREAD:XWBTO SET TOFLAG=$T DO CHK DO:'XWBSTOP  QUIT:DONE
 | 
|---|
| 24 |  . IF $L(STR)+$L(XWBX)>400 DO ADD(STR) S STR=""
 | 
|---|
| 25 |  . SET STR=STR_XWBX
 | 
|---|
| 26 |  . FOR  Q:STR'[$C(10)  DO ADD($P(STR,$C(10))) SET STR=$P(STR,$C(10),2,999)
 | 
|---|
| 27 |  . IF STR[EOT SET STR=$P(STR,EOT) DO ADD(STR) SET DONE=1 QUIT
 | 
|---|
| 28 |  . SET PIECES=$L(STR,">")
 | 
|---|
| 29 |  . IF PIECES>1 DO ADD($P(STR,">",1,PIECES-1)_">") SET STR=$P(STR,">",PIECES,999)
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  QUIT 1
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | ADD(TXT) ; -- add new intake line
 | 
|---|
| 34 |  SET LINE=LINE+1
 | 
|---|
| 35 |  SET @XWBROOT@(LINE)=TXT
 | 
|---|
| 36 |  QUIT
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 | CHK ; -- check if first read and change timeout and chars to read
 | 
|---|
| 39 |  IF 'TOFLAG,XWBFIRST SET XWBSTOP=1,DONE=1 QUIT  ; -- could cause small msg to not process
 | 
|---|
| 40 |  SET XWBFIRST=0
 | 
|---|
| 41 |  SET XWBREAD=100,XWBTO=2 ;M2M changed XWBTO=2 
 | 
|---|
| 42 |  QUIT
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ; ---------------------------------------------------------------------
 | 
|---|
| 46 |  ;                      Methods for Opening and Closing Socket
 | 
|---|
| 47 |  ; ---------------------------------------------------------------------
 | 
|---|
| 48 | OPEN(XWBPARMS) ; -- Open tcp/ip socket
 | 
|---|
| 49 |  NEW I,POP
 | 
|---|
| 50 |  SET POP=1
 | 
|---|
| 51 |  DO INIT
 | 
|---|
| 52 |  DO SAVDEV^%ZISUTL("XWBM2M CLIENT") ;M2M changed name
 | 
|---|
| 53 |  FOR I=1:1:XWBPARMS("RETRIES") DO CALL^%ZISTCP(XWBPARMS("ADDRESS"),XWBPARMS("PORT")) QUIT:'POP
 | 
|---|
| 54 |  ; Device open
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  IF 'POP USE IO QUIT 1
 | 
|---|
| 57 |  ; Device not open
 | 
|---|
| 58 |  QUIT 0
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 | CLOSE ; -- close tcp/ip socket
 | 
|---|
| 61 |  ; -- tell server to Stop() connection
 | 
|---|
| 62 |  I $G(XWBOS)="" D INIT
 | 
|---|
| 63 |  DO PRE
 | 
|---|
| 64 |  DO WRITE($$XMLHDR^XWBUTL()_"<vistalink type='Gov.VA.Med.Foundations.CloseSocketRequest' ></vistalink>")
 | 
|---|
| 65 |  DO POST
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  ; -Read results from server close string.  **M2M
 | 
|---|
| 68 |  IF $G(XWBPARMS("CCLOSERESULTS"))="" SET XWBPARMS("CCLOSERESULTS")=$NA(^TMP("XWBM2MRL",$J,"XML"))
 | 
|---|
| 69 |  SET XWBROOT=XWBPARMS("CCLOSERESULTS") K @XWBROOT
 | 
|---|
| 70 |  SET XWBREAD=20,XWBTO=1,XWBFIRST=0,XWBSTOP=0
 | 
|---|
| 71 |  SET XWBCOK=$$READ^XWBRL(XWBROOT,.XWBREAD,.XWBTO,.XWBFIRST,.XWBSTOP)
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  DO FINAL
 | 
|---|
| 74 |  DO CLOSE^%ZISTCP
 | 
|---|
| 75 |  DO USE^%ZISUTL("XWBM2M CLIENT") ; Change name **M2M
 | 
|---|
| 76 |  DO RMDEV^%ZISUTL("XWBM2M CLIENT")
 | 
|---|
| 77 |  QUIT
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | INIT ; -- set up variables needed in tcp/ip processing
 | 
|---|
| 80 |  SET XWBOS=$S(^%ZOSF("OS")["DSM":"DSM",^("OS")["UNIX":"UNIX",^("OS")["OpenM":"OpenM",1:"MSM")
 | 
|---|
| 81 |  QUIT
 | 
|---|
| 82 |  ;
 | 
|---|
| 83 | FINAL ; -- kill variables used in tcp/ip processing
 | 
|---|
| 84 |  KILL XWBOS,XWBOS,XWBPARMS,XWBPARMS
 | 
|---|
| 85 |  QUIT
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ; ---------------------------------------------------------------------
 | 
|---|
| 88 |  ;                          Methods for Writing to TCP/IP Socket
 | 
|---|
| 89 |  ; ---------------------------------------------------------------------
 | 
|---|
| 90 | PRE ; -- prepare socket for writing
 | 
|---|
| 91 |  SET $X=0
 | 
|---|
| 92 |  QUIT
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | WRITE(STR) ; -- Write a data string to socket
 | 
|---|
| 95 |  ;*p34-removed intervening lines that call WBF.
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  I $G(XWBOS)="" D INIT ;*p34-make sure XWBOS is defined.
 | 
|---|
| 98 |  IF XWBOS="MSM" WRITE STR QUIT
 | 
|---|
| 99 |  ; send data for DSM (requires buffer flush (!) every 511 chars)
 | 
|---|
| 100 |  ; GT.M is the same as DSM. 
 | 
|---|
| 101 |  ; Use an arbitrary value of 255 as the Write limit.
 | 
|---|
| 102 |  ;IF XWBOS="DSM"!(XWBOS="UNIX")!(XWBOS="OpenM) next line
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ;*p34-modified write to for Cache 5 in case less then 255 char.
 | 
|---|
| 105 |  F  Q:'$L(STR)  W $E(STR,1,255) D WBF S STR=$E(STR,256,99999)
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ;Old code**
 | 
|---|
| 108 |  ;;I $L(STR)<255 D:($X+$L(STR))>255 WBF W STR Q
 | 
|---|
| 109 |  ;;D:$X>0 WBF ;Flush what is in the buffer
 | 
|---|
| 110 |  ;;F  D WBF Q:'$L(STR)  W $E(STR,1,255) S STR=$E(STR,256,$L(STR))
 | 
|---|
| 111 |  ;;F  Q:'$L(STR)  W $E(STR,1,255) D WBF S STR=$E(STR,256,99999)
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  QUIT
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 | WBF ;Write Buffer Flush - W !
 | 
|---|
| 116 |  ;p34-included option for GTM
 | 
|---|
| 117 |  I $G(XWBOS)="" D INIT
 | 
|---|
| 118 |  W @$S(XWBOS'["GTM":"!",1:"#") ;*p34
 | 
|---|
| 119 |  Q
 | 
|---|
| 120 |  ;
 | 
|---|
| 121 | POST ; -- send eot and flush socket buffer
 | 
|---|
| 122 |  DO WRITE($C(4)),WBF:$X>0
 | 
|---|
| 123 |  QUIT
 | 
|---|