Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Mscomm
Message
De
07/04/2003 09:00:54
 
 
À
04/04/2003 15:15:25
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Re: Mscomm
Divers
Thread ID:
00774245
Message ID:
00774657
Vues:
19
Perdon por mi gramatica mala. En este exemplo, La clase mscommcontainer ha sido puesta una forma. Espero que esto le ayude:

I apologize for my bad grammar. In this example, the mscommcontainer class has been put on a form. I hope it helps you:
		*--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
		IF THISFORM.llescape
			RETURN
		ENDIF
		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 .and. !thisform.llexit	&& if user presses escape, cancel and return
			=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 .and. !thisform.llexit		&& is user presses escape, cancel and return
			IF thisform.llexit
				RETURN
			ENDIF
			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

	ENDPROC

	PROCEDURE waitforresponse
		*~ 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
			IF thisform.llexit
				RETURN
			ENDIF
			DOEVENTS
		ENDDO
		RETURN
	ENDPROC
.·*´¨)
.·`TCH
(..·*

010000110101001101101000011000010111001001110000010011110111001001000010011101010111001101110100
"When the debate is lost, slander becomes the tool of the loser." - Socrates
Vita contingit, Vive cum eo. (Life Happens, Live With it.)
"Life is not measured by the number of breaths we take, but by the moments that take our breath away." -- author unknown
"De omnibus dubitandum"
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform