2011-04-06 6 views
0

je charge un fichier XML avec cette simple Flash CS5/ActionScript 3 programme:Pourquoi URLStream.connected est-il toujours vrai?

import flash.net.*; 

var URL_REQUEST:URLRequest = new URLRequest('http://preferans.de/top-xml.php'); 
var URL_STREAM:URLStream = new URLStream(); 
var URL_VARS:URLVariables = new URLVariables(); 
var UPDATE_TIMER:Timer = new Timer(1000); 

stop(); 

UPDATE_TIMER.addEventListener(TimerEvent.TIMER, handleTimer); 
UPDATE_TIMER.start(); 

URL_REQUEST.method = URLRequestMethod.GET; 
URL_REQUEST.data = URL_VARS; 

URL_STREAM.addEventListener(IOErrorEvent.IO_ERROR, handleUserError); 
URL_STREAM.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleUserError); 
URL_STREAM.addEventListener(Event.OPEN, handleUserOpen); 
URL_STREAM.addEventListener(ProgressEvent.PROGRESS, handleUserData); 
URL_STREAM.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleUserStatus); 
URL_STREAM.addEventListener(Event.COMPLETE, handleUserComplete); 
URL_STREAM.load(URL_REQUEST); 

function handleUserOpen(event:Event):void { 
    trace('handleUserOpen: ' + event); 
} 

function handleUserData(event:Event):void { 
    trace('handleUserData: ' + event); 
} 

function handleUserStatus(event:HTTPStatusEvent):void { 
    trace('handleUserStatus: ' + event.status); 
} 

function handleUserError(event:Event):void { 
    trace('handleUserError: ' + event); 
} 

function handleUserComplete(event:Event):void { 
    trace('handleUserComplete: ' + event); 

    try { 
     var str:String = URL_STREAM.readUTFBytes(URL_STREAM.bytesAvailable); 
     var xml:XML = new XML(str); 
     trace(xml); 
    } catch(e:Error){ 
     trace('Invalid data: ' + e); 
     return; 
    } 
} 

function handleTimer(event:TimerEvent):void { 
    var now:int = getTimer(); 

    trace(UPDATE_TIMER.currentCount + ' ' + now + ' ' + URL_STREAM.connected); 
} 

il fonctionne très bien et je peux voir le contenu XML:

handleUserOpen: [Event type="open" bubbles=false cancelable=false eventPhase=2] 
handleUserData: [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=2390 bytesTotal=2390] 
handleUserStatus: 200 
handleUserComplete: [Event type="complete" bubbles=false cancelable=false eventPhase=2] 
<pref> 
    [ .... XML content .....] 
</pref> 
1 1054 true 
2 2054 true 
3 3054 true 
4 4054 true 
5 5054 true 
..... 
90 90054 true 
91 91054 true 

mais je ne comprends pas, pourquoi est URLStream.connected toujours true.

Je redémarre même Apache sur mon serveur web, mais cela ne change rien. Je pose cette question, car je prévois d'implémenter des appels de type Comet (aka HTTP-push) dans mon programme et j'ai besoin de savoir si URLStream est toujours en activité/occupé ou s'il est terminé/interrompu et peut être réutilisé pour un nouveau load() appel (et je ne veux pas introduire une variable d'état de contournement pour cela).

Merci! Alex

Répondre

1

Je pense qu'avec URLStream tant qu'il accède au fichier sa connexion reste établie, même quand il n'a pas commencé à télécharger quelque chose ou a fini de télécharger quelque chose. Donc je pense que vous devez .close() manuellement dans la fonction .COMPLETE après avoir fini de lire les valeurs.