>*--MsCommContainer.OnComm() >*--Last Modified: >*--TCHolzer 01/22/2002 Trimmed extra characters from receive string >*--TCHolzer 01/31/2002 Corrected storing of input buffer to variable s for ON_LIST case >LOCAL ; > i,; > istop,; > lnStart,; > lnBegin >#define ON_IDLE 0 && dummy status to prevent onevent firing >#define ON_STATUS 1 && status of phonetree >#define ON_SIZE 2 && number of records in list >#define ON_VERSION 3 && phonetree version >#define ON_MESSAGE 4 && receive message from phonetree >#define ON_LIST 5 && List messages sent to >#define ON_PUTMSG 6 && send messge to phonetree >#define ON_PUTLST 7 && send list to phonetree >#define ON_STOPCALL 8 && stop calling from list immediately >#define _END_CHAR CHR(10) >#define _NULL CHR(0) > >this.creceivebuffer="" >this.creceivestr="" >this.lcstring="" >this.result="" >lnstart=SECONDS() >lnBegin=SECONDS() > >IF UPPER(TYPE('OnCommType'))="N" > THIS.oncommtype=OnCommType > IF this.oncommtype<>ON_IDLE > =this.waitforresponse(1) > ELSE > =this.waitforresponse(1) > ENDIF >ELSE > this.oncommtype=0 && idle by default > =this.waitforresponse(1) >ENDIF > >LnBegin=SECONDS() >DO WHILE THIS.commevent<>2 > =this.waitforresponse(1) > IF SECONDS()-LnBegin>3 > IF this.oncommtype<>ON_IDLE > *--Should have switched commevent to 2 by now, not receiving for some reason > MESSAGEBOX('An Error Occurred with Phonetree.'+CHR(13); > +'Unable to get response. Please verify'+CHR(13); > +'the Phonetree system is turned on and'+CHR(13); > +'try again.',48,'ERROR communicating with Phonetree.',50000000) > ENDIF > EXIT > ENDIF >ENDDO >DO WHILE THIS.CommEvent=2 > IF THIS.CommEvent=2 && capture the information in this.input > IF THIS.InBufferCount>0 && received data > *--If a message or a list was received, wait for the end of it > IF this.oncommtype=ON_MESSAGE.OR.this.oncommtype=ON_LIST && receive message or receive list from phonetree > lnstart=SECONDS() > DO WHILE !CHR(26) $ this.lcstring > this.lcString = this.lcstring+this.input > IF this.lcString=="".or.alltrim(this.lcstring)=">" && nothing received! > IF SECONDS()-lnstart>120 > EXIT > ENDIF > ENDIF > ENDDO > IF this.oncommtype=ON_LIST > s=this.lcstring > this.result=this.lcstring > this.lcstring="" > ENDIF > ELSE > this.lcstring = this.lcstring + this.input > ENDIF > IF !(this.lcstring == "") > this.result = "" > *--we captured all of the data from the port, make sure it is not just > *--an acknowledgement of a carriage return sent to phonetree > IF ALLTRIM(this.lcstring)=">" && this is from all carriage returns sent to phonetree > EXIT > ENDIF > i=1 > istop=(LEN(this.lcstring)) > IF this.oncommtype!=ON_LIST > FOR i = 1 TO istop > DO WHILE ASC(SUBSTR(this.lcstring, i, 1))!=0 .and. SUBSTR(this.lcstring, i, 1) != _NULL ; > .and. ASC(SUBSTR(this.lcstring, i, 1))!=32 > IF SUBSTR(this.lcstring, i, 1) != _END_CHAR .and. SUBSTR(this.lcstring, i, 1)!=">"; > .and.SUBSTR(this.lcstring, i, 1) != _NULL; > .and.ASC(SUBSTR(this.lcstring, i, 1))!=32 > this.result = LEFT(this.lcstring, i) > i=i+1 > ELSE > i=i+1 > ENDIF > ENDDO > i=i+1 > ENDFOR > ENDIF > ELSE > this.result="" > ENDIF > IF this.oncommtype!=ON_MESSAGE .and. this.oncommtype!=ON_LIST && receive message or list from phonetree, do NOT strip > FOR i = 1 TO LEN(this.result) > IF ASC(SUBSTR(this.result, i, 1))=32 .and. i>1 > this.result = LEFT(this.result, i-1) > ENDIF > IF ASC(SUBSTR(this.result, i, 1))=13 .and. i>1 > this.result = LEFT(this.result, i-1) > ENDIF > ENDFOR > ENDIF > DO CASE > CASE this.oncommtype=ON_STATUS > mPTStatus=this.result > CASE this.oncommtype=ON_VERSION > mPTVersion=this.result > CASE this.oncommtype=ON_SIZE > mPTSize=this.result > CASE this.oncommtype=ON_MESSAGE > s=this.result > CASE this.oncommtype=ON_LIST > *Do NOTHING s is stored above > OTHERWISE > *DO NOTHING > ENDCASE > ELSE && just in case only > EXIT > ENDIF > ELSE && just in case only > EXIT > ENDIF && is commevent 2 or not, of not we exit the loop >ENDDO && while this.commevent=2 >RETURN > >>
>*~ This method loops for the specified >*~ amount of time calling DOEVENTS(). >*~ This allows time for the modem to respond to the requests. > >LPARAMETERS lnDelayInSeconds > >LOCAL lnStartTime >lnStartTime = SECO() > >DO WHILE SECO() <= (lnStartTime + lnDelayInSeconds) ; > AND NOT SECO() < lnStartTime > DOEVENTS() >ENDDO >RETURN >>