| 1 | XWBM2MT ;OIFO-Oakland/REM - M2M Broker Example ;05/16/2002  14:09
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 | EN(CONTX,RPCN) ;Entry point to hard code IP,PORT,AV
 | 
|---|
| 7 |  S IP="127.0.0.1",PORT=9800,AV="QQQQ11;11ZZZZ.."
 | 
|---|
| 8 |  D EN1(CONTX,RPCN,PORT,IP,AV)
 | 
|---|
| 9 |  Q
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | EN1(CONTX,RPCN,PORT,IP,AV) ;
 | 
|---|
| 12 |  N I
 | 
|---|
| 13 |  ;Entry point that passes in needed parameters.  If use this entry point,
 | 
|---|
| 14 |  ; need to set up params first.
 | 
|---|
| 15 |  ;CONTX - Name of context
 | 
|---|
| 16 |  ;RPCN - RPC name
 | 
|---|
| 17 |  ;PORT - port number
 | 
|---|
| 18 |  ;IP - IP address
 | 
|---|
| 19 |  ;AV - access/verify codes
 | 
|---|
| 20 |  ;XWBOPEN - set this flag before call to keep connection open after call.
 | 
|---|
| 21 |  K REQ,STATE,RPC
 | 
|---|
| 22 |  S U="^" I $G(DUZ)'>0 W !,"Please Call XUP first!" Q
 | 
|---|
| 23 |  D HOME^%ZIS U IO
 | 
|---|
| 24 |  W !!,"Test a M2M call to ",CONTX," context."
 | 
|---|
| 25 |  D OPEN(PORT,IP,AV)
 | 
|---|
| 26 |  I XWBSTATE("M2M","OPEN")=0 D HOME^%ZIS U IO W !,"Didn't get port open or AV failed." Q
 | 
|---|
| 27 |  I '$$SETCONTX^XWBM2MC(CONTX) D HOME^%ZIS U IO W !,"Didn't get Context" G EXIT
 | 
|---|
| 28 |  ;This code is run if called from EN3
 | 
|---|
| 29 |  I $G(RMFLAG)=1 D
 | 
|---|
| 30 |  .D CLEARP
 | 
|---|
| 31 |  .D SETPARAM(1,"STRING","RAUL TEST")
 | 
|---|
| 32 |  D HOME^%ZIS U IO
 | 
|---|
| 33 |  W !,"Call ",RPCN," - RPC."
 | 
|---|
| 34 |  I '$$CALLRPC^XWBM2MC(RPCN,"REQ",1) D HOME^%ZIS U IO W !,"Could not run RPC."
 | 
|---|
| 35 |  W !,"Result: " F I=1:1 Q:'$D(REQ(I))  W !,REQ(I)
 | 
|---|
| 36 |  W !
 | 
|---|
| 37 |  K RMFLAG
 | 
|---|
| 38 |  I $G(XWBOPEN)=1 Q  ;flag to quit and keep connection open
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 | EXIT D CLOSE
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | EN2 ;Entry point that hard sets IP,PORT,AV,CONTEXT,RPC.
 | 
|---|
| 44 |  ;RMFLAG - if RMGLAG=1, it will set PARAM in EN1. 
 | 
|---|
| 45 |  N IP,PORT,AV,CONTX,RPCN,RMFLAG
 | 
|---|
| 46 |  S RMFLAG=1
 | 
|---|
| 47 |  ;S IP="10.4.229.21",PORT="9800",AV="2287CTD;11ZZZZ.." ;BayPines Cache
 | 
|---|
| 48 |  S IP="127.0.0.1",PORT=9800,AV="QQQQ11;11ZZZZ.."
 | 
|---|
| 49 |  S CONTX="XWB BROKER EXAMPLE",RPCN="XWB EXAMPLE ECHO STRING"
 | 
|---|
| 50 |  D EN1(CONTX,RPCN,PORT,IP,AV)
 | 
|---|
| 51 |  Q
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 | EN3(VAL) ;Just runs RPC; need to OPEN, SETCONTX then CLOSE.  Or just call after 
 | 
|---|
| 54 |  ; connection has been done. **ONLY WORKS FOR TESTING IN DEV,XWB**
 | 
|---|
| 55 |  N STR,ROOT,RPC,RES
 | 
|---|
| 56 |  S ^TMP("XWBM2MTEST",$J,"TYPE")="STRING"
 | 
|---|
| 57 |  S ^TMP("XWBM2MTEST",$J,"VALUE")=VAL
 | 
|---|
| 58 |  S ROOT=$NA(^TMP("XWBM2MTEST",$J))
 | 
|---|
| 59 |  I '$$PARAM^XWBM2MC(1,ROOT) W !,"PARAM failed." Q 0
 | 
|---|
| 60 |  S RPC="ZZRM TEST RPC",RES="RESPONSE"
 | 
|---|
| 61 |  I '$$CALLRPC^XWBM2MC(RPC,RES,0) Q 0  ;D HOME^%ZIS U IO W !,"Could not run RPC."
 | 
|---|
| 62 |  K ^TMP("XWBM2MTEST")
 | 
|---|
| 63 |  Q 1
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | ECHOSTR ;Example of Echo String
 | 
|---|
| 66 |  N XWBSTR,XWBIP,XWBPORT,XWBAV,Y
 | 
|---|
| 67 |  S XWBIP="",XWBPORT="",XWBAV=""
 | 
|---|
| 68 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter String: ",DIR("B")="TEST STRING"
 | 
|---|
| 69 |  D ^DIR I $D(DIRUT) Q
 | 
|---|
| 70 |  S XWBSTR=$$CHARCHK^XWBUTL(Y)
 | 
|---|
| 71 |  D CLEARP
 | 
|---|
| 72 |  D SETPARAM(1,"STRING",XWBSTR)
 | 
|---|
| 73 |  I $G(XWBFLAG) D EN("XWB BROKER EXAMPLE","XWB EXAMPLE ECHO STRING") K XWBFLAG Q
 | 
|---|
| 74 |  D USERIP Q:$G(XWBQUIT) 
 | 
|---|
| 75 |  D EN1("XWB BROKER EXAMPLE","XWB EXAMPLE ECHO STRING",XWBPORT,XWBIP,XWBAV)
 | 
|---|
| 76 |  D CLEAN
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | WP ;Example of WP
 | 
|---|
| 80 |  N XWBSTR,XWBIP,XWBPORT,XWBAV
 | 
|---|
| 81 |  S XWBIP="",XWBPORT="",XWBAV=""
 | 
|---|
| 82 |  D CLEARP
 | 
|---|
| 83 |  I $G(XWBFLAG) D EN("XWB BROKER EXAMPLE","XWB EXAMPLE WPTEXT") K XWBFLAG Q
 | 
|---|
| 84 |  D USERIP Q:$G(XWBQUIT)
 | 
|---|
| 85 |  D EN1("XWB BROKER EXAMPLE","XWB EXAMPLE WPTEXT",XWBPORT,XWBIP,XWBAV)
 | 
|---|
| 86 |  D CLEAN
 | 
|---|
| 87 |  Q
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | LARRY ;Example of passing Array (mult).
 | 
|---|
| 90 |  N XWBIP,XWBPORT,XWBAV
 | 
|---|
| 91 |  S XWBIP="",XWBPORT="",XWBAV=""
 | 
|---|
| 92 |  D CLEARP
 | 
|---|
| 93 |  S XWBPARMS("PARAMS",1,"TYPE")="ARRAY"
 | 
|---|
| 94 |  S XWBPARMS("PARAMS",1,"VALUE","Raul")="Programmer"
 | 
|---|
| 95 |  S XWBPARMS("PARAMS",1,"VALUE","Susan")="Tech Writter"
 | 
|---|
| 96 |  S XWBPARMS("PARAMS",1,"VALUE","Dan")="Project Mgr"
 | 
|---|
| 97 |  I $G(XWBFLAG) D EN("XWB BROKER EXAMPLE","XWB M2M EXAMPLE LARRY") K XWBFLAG Q
 | 
|---|
| 98 |  D USERIP Q:$G(XWBQUIT)
 | 
|---|
| 99 |  D EN1("XWB BROKER EXAMPLE","XWB M2M EXAMPLE LARRY",XWBPORT,XWBIP,XWBAV)
 | 
|---|
| 100 |  D CLEAN
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 |  ;
 | 
|---|
| 103 | LARRYRP(XWBY,XWBARR,XWBSTR) ;Remote procedure for local array
 | 
|---|
| 104 |  NEW XWBX,XWBLINE
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 |  SET XWBLINE=0
 | 
|---|
| 107 |  I $G(XWBSTR)'="" S XWBY(1)=$G(XWBSTR) S XWBLINE=1
 | 
|---|
| 108 |  SET XWBX="" FOR  SET XWBX=$O(XWBARR(XWBX)) QUIT:XWBX=""  DO
 | 
|---|
| 109 |  .S XWBLINE=XWBLINE+1
 | 
|---|
| 110 |  .S XWBY(XWBLINE)=XWBX_" / "_XWBARR(XWBX)
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | LARRSTR ;Example of passing Array (mult) and String.
 | 
|---|
| 114 |  N XWBIP,XWBPORT,XWBAV
 | 
|---|
| 115 |  S XWBIP="",XWBPORT="",XWBAV=""
 | 
|---|
| 116 |  D CLEARP
 | 
|---|
| 117 |  S XWBPARMS("PARAMS",1,"TYPE")="ARRAY"
 | 
|---|
| 118 |  S XWBPARMS("PARAMS",1,"VALUE","Raul")="Programmer"
 | 
|---|
| 119 |  S XWBPARMS("PARAMS",1,"VALUE","Susan")="Tech Writter"
 | 
|---|
| 120 |  S XWBPARMS("PARAMS",1,"VALUE","Dan")="Project Mgr"
 | 
|---|
| 121 |  S XWBPARMS("PARAMS",2,"TYPE")="STRING"
 | 
|---|
| 122 |  S XWBPARMS("PARAMS",2,"VALUE")="String and Array (MULT) TEST"
 | 
|---|
| 123 |  I $G(XWBFLAG) D EN("XWB BROKER EXAMPLE","XWB M2M EXAMPLE LARRY") K XWBFLAG Q
 | 
|---|
| 124 |  D USERIP Q:$G(XWBQUIT)
 | 
|---|
| 125 |  D EN1("XWB BROKER EXAMPLE","XWB M2M EXAMPLE LARRY",XWBPORT,XWBIP,XWBAV)
 | 
|---|
| 126 |  D CLEAN
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | REF ;Example of passing a value by reference
 | 
|---|
| 130 |  N XWBREF,Y,XWBSTR,XWBIP,XWBPORT,XWBAV
 | 
|---|
| 131 |  S XWBIP="",XWBPORT="",XWBAV=""
 | 
|---|
| 132 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter Reference Value: ",DIR("B")="DT"
 | 
|---|
| 133 |  D ^DIR I $D(DIRUT) Q
 | 
|---|
| 134 |  S XWBREF=$$CHARCHK^XWBUTL(Y)
 | 
|---|
| 135 |  D CLEARP
 | 
|---|
| 136 |  D SETPARAM(1,"REF",XWBREF)
 | 
|---|
| 137 |  I $G(XWBFLAG) D EN("XWB BROKER EXAMPLE","XWB M2M EXAMPLE REF") K XWBFLAG Q
 | 
|---|
| 138 |  D USERIP Q:$G(XWBQUIT)
 | 
|---|
| 139 |  D EN1("XWB BROKER EXAMPLE","XWB M2M EXAMPLE REF",XWBPORT,XWBIP,XWBAV)
 | 
|---|
| 140 |  D CLEAN
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | REFRP(RET,PARAM) ;Remote procedure for value passed by reference
 | 
|---|
| 144 |  S RET(0)=PARAM
 | 
|---|
| 145 |  Q
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 | USERIP ;Get IP,Port,AV from user for connection.
 | 
|---|
| 148 |  N Y
 | 
|---|
| 149 |  S XWBQUIT=0
 | 
|---|
| 150 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter IP: ",DIR("B")="127.0.0.1"
 | 
|---|
| 151 |  D ^DIR I $D(DIRUT) S XWBQUIT=1 Q
 | 
|---|
| 152 |  S XWBIP=Y
 | 
|---|
| 153 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter PORT: ",DIR("B")="9800"
 | 
|---|
| 154 |  D ^DIR I $D(DIRUT) S XWBQUIT=1 Q
 | 
|---|
| 155 |  S XWBPORT=Y
 | 
|---|
| 156 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter AV: ",DIR("?")="e.g. Smith;11PASSWORD!! "
 | 
|---|
| 157 |  D ^DIR I $D(DIRUT) S XWBQUIT=1 Q
 | 
|---|
| 158 |  S XWBAV=Y
 | 
|---|
| 159 |  K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter CONTEXT: ",DIR("B")="XWB BROKER EXAMPLE"
 | 
|---|
| 160 |  D ^DIR I $D(DIRUT) S XWBQUIT=1 Q
 | 
|---|
| 161 |  S XWBCONTX=Y
 | 
|---|
| 162 |  I $G(XWBREPFL) D 
 | 
|---|
| 163 |  .K DIR S DIR(0)="FAU^1:50",DIR("A")="Enter REPS: "
 | 
|---|
| 164 |  .D ^DIR I $D(DIRUT) S XWBQUIT=1 Q
 | 
|---|
| 165 |  .S XWBREPS=Y
 | 
|---|
| 166 |  Q
 | 
|---|
| 167 |  ;
 | 
|---|
| 168 | OPEN(PORT,IP,AV) ;Opens connection to server.
 | 
|---|
| 169 |  ;S IP="127.0.0.1",PORT="9800",AV="QQQQ11;11ZZZZ.." ;Local
 | 
|---|
| 170 |  ;S IP="10.4.229.21",PORT="9800",AV="2287CTD;11ZZZZ.." ;BayPines Cache
 | 
|---|
| 171 |  S XWBSTATE("M2M","OPEN")=$$CONNECT^XWBM2MC(PORT,IP,AV)
 | 
|---|
| 172 |  Q
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 | CLOSE ;Close the connection.
 | 
|---|
| 175 |  S X=$$CLOSE^XWBM2MC()
 | 
|---|
| 176 |  S XWBSTATE("M2M","OPEN")=0
 | 
|---|
| 177 |  D CLEAN
 | 
|---|
| 178 |  K X,XWBOPEN
 | 
|---|
| 179 |  Q
 | 
|---|
| 180 |  ;
 | 
|---|
| 181 | CLEARP ;Clear the PARAMS array
 | 
|---|
| 182 |  I '$G(XWBDBUG) K XWBPARMS
 | 
|---|
| 183 |  D PRE^XWBM2MC
 | 
|---|
| 184 |  Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 | SETPARAM(INDEX,TYPE,VALUE) ;Set a Params entry
 | 
|---|
| 187 |  S XWBPARMS("PARAMS",INDEX,"TYPE")=TYPE
 | 
|---|
| 188 |  S XWBPARMS("PARAMS",INDEX,"VALUE")=VALUE
 | 
|---|
| 189 |  Q
 | 
|---|
| 190 |  ;
 | 
|---|
| 191 | CLNTMP ;Kills the TMP("XWB*"
 | 
|---|
| 192 |  K ^TMP("XWBM2M"),^TMP("XWBM2MVLC"),^TMP("XWBM2MRPC"),^TMP("XWBM2MRL")
 | 
|---|
| 193 |  K ^TMP("XWBM2ME"),^TMP("XWBM2M"),^TMP("XWBM2ML")
 | 
|---|
| 194 |  Q
 | 
|---|
| 195 |  ;
 | 
|---|
| 196 | CLEAN ;
 | 
|---|
| 197 |  K REQ,XWBCONTX
 | 
|---|
| 198 |  Q
 | 
|---|
| 199 |  ;
 | 
|---|