Previous Topic: Feedback Codes

Next Topic: Broadcast Services Interface


$CACCI Example

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