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