The following NCL procedure shows the use of the INIT, INQUIRE, SEND, RECEIVE and TERMINATE functions to create a simple test of CA CCI within one system. The name of the procedure is MYCCIXMP.
-* Test $CACCI
&I = &SUBSTR &1 1 1 &IF .&I = .C &THEN + &GOSUB .CLIENT &ELSE + &GOSUB .SERVER
&EXIT
-* Server side of CCI connection .SERVER -* Register with CCI &CALL PROC=$CACCI PARMS=(OPT=INIT,NAME=MYSERVER) &IF &RETCODE = 0 &THEN &DO &WRITE Server: INIT RC:+ &RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT &RETSUB &DOEND &SVID = &$CACCIID
-* Start a client to talk to us &INTCMD -START MYCCIXMP CLIENT
-* Handshake with client &DOUNTIL .&MSG = .READY OR .&MSG = .ABORT &INTREAD TYPE=ANY VARS=MSG &WRITE Client sent: &MSG &DOEND
-* Bail out if client had problems &IF &MSG = ABORT &THEN &DO &WRITE Server: Aborting as requested by client &RETSUB &DOEND
-* Ask CCI for a list of all interested receivers &CALL PROC=$CACCI PARMS=(OPT=INQUIRE,ID=&SVID,NAME=MY**************,+ MDO=MYMDO) SHARE=(MYMDO>) &IF &RETCODE = 0 &THEN &DO &WRITE Server: INQUIRE RC:+ &RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT &RETSUB &DOEND
-* Display receiver information
&ASSIGN VARS=NUMREC FROM MDO=MYMDO.NUMRECEIVERS
&WRITE Server: &NUMREC receivers found:
&WRITE Server: SYSID Name LclRmt State MsgsQd
&I = 1
&DOWHILE &I <= &NUMREC
&ASSIGN VARS=SID FROM
MDO=MYMDO.CCIRECEIVERS.{&I}.RECEIVERID.SYSID
&ASSIGN VARS=NAME FROM
MDO=MYMDO.CCIRECEIVERS.{&I}.RECEIVERID.NAME
&ASSIGN VARS=REMOTE FROM MDO=MYMDO.CCIRECEIVERS.{&I}.REMOTE
&ASSIGN VARS=ACTIVE FROM MDO=MYMDO.CCIRECEIVERS.{&I}.ACTIVE
&ASSIGN VARS=QUEUED FROM
MDO=MYMDO.CCIRECEIVERS.{&I}.MESSAGESQUEUED
&IF &REMOTE = 1 &THEN &REMOTE = REMOTE
&ELSE &REMOTE = LOCAL*
&IF &ACTIVE = 1 &THEN &ACTIVE = ACTIVE**
&ELSE &ACTIVE = INACTIVE
&WRITE Server: &SID &NAME &REMOTE &ACTIVE &QUEUED
-* Send 2 messages to the receivers
&CONTROL NOUCASE
&DATA = &ZQUOTE (Hello from the CCI server)
&CONTROL UCASE
&CALL PROC=$CACCI
PARMS=(OPT=SEND,ID=&SVID,NAME=&NAME,SYSID=&SID,+
DATA=&DATA)
&IF &RETCODE = 0 &THEN &DO
&WRITE Server: SEND RC:+
&RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT
&RETSUB
&DOEND
&CALL PROC=$CACCI PARMS=(DATA='Hello()from the CCI server
again',+
OPT=SEND,ID=&SVID,NAME=&NAME,SYSID=&SID)
&IF &RETCODE = 0 &THEN &DO
&WRITE Server: SEND RC:+
&RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT
&RETSUB
&DOEND
&I = &I + 1
&DOEND
&WRITE
-* Display all messages from the client &DOUNTIL .&MSG = .FIN &INTREAD TYPE=ANY STRING=(MSG) &WRITE Client: &MSG &DOEND
-* Terminate our CCI connection
&CALL PROC=$CACCI PARMS=(OPT=TERMINATE,ID=&SVID)
&IF &RETCODE = 0 &THEN &DO
&WRITE Server: TERM gave:,
&RETCODE &CACCIFDBK &$CAERRORCODE &$CAERRORTEXT
&RETSUB
&DOEND
&RETSUB
-* Client side of CCI connection .CLIENT
-* Register with CCI &CONTROL NOUCASE &CLIENT = &ZQUOTE MY Client .Do_Do &CONTROL UCASE &CALL PROC=$CACCI PARMS=(OPT=INIT,NAME=&CLIENT) &IF &RETCODE = 0 &THEN &DO &WRITE Client: INIT RC:+ &RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT &WRITE ABORT &RETSUB &DOEND &CLID = &$CACCIID &WRITE &CLID
-* Tell CCI to receive msgs from our server &CALL PROC=$CACCI PARMS=(OPT=RECEIVE,ID=&CLID,NAME=MYSERVER) &IF &RETCODE = 0 &THEN &DO &WRITE RECEIVE RC:+ &RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT &WRITE ABORT &RETSUB &DOEND
-* Tell the server ready for messages &WRITE READY
-* Receive and display all messages
&DOUNTIL &ZFDBK ¬= 0
&INTREAD TYPE=REQ STRING=(*) WAIT=3
&IF &ZFDBK = 0 &THEN &DO
&ASSIGN VARS=MSG FROM MDO=$INT.USERMDO
&ASSIGN VARS=NOTIFY FROM MDO=$INT.TEXT
&WRITE Server sent: &MSG
&WRITE Notify msg : &NOTIFY
&DOEND
&DOEND
-* Terminate our CCI connection &CALL PROC=$CACCI PARMS=(OPT=TERMINATE,ID=&CLID) &IF &RETCODE = 0 &THEN &DO &WRITE Client: TERM RC:+ &RETCODE FB:&CACCIFDBK EC:&$CAERRORCODE ET:&$CAERRORTEXT &WRITE FIN &RETSUB &DOEND
-* Tell the server finished &WRITE FIN &RETSUB
| Copyright © 2009 CA. All rights reserved. |
|