com.neolao.controls.LoadManager

Gestionnaire de chargement, classe abstraite.

Classes recquises:

Propriétés

Visibilité Type Nom Status Description
public Number bytesLoaded Lecture seule Les bytes chargés
public Number bytesTotal Lecture seule Les bytes totaux
public String url Lecture seule L'url à charger
public MovieClip content Lecture seule L'instance du contenu chargé
public Number timeout Le nombre de millisecondes qui correspond au timeout
public MovieClip targetInstance L'instance de la cible (différent du contenu, mais ca peut être le même)

Méthodes

Visibilité Return Nom Param 1 Description
public Void load pUrl:String Charge une URL

Evénements

Nom Param 1 Param 2 Description
onLoad Evénement invoqué lorsqu'un chargement est terminé.
onLoading pBytesLoaded:Number pBytesTotal:Number Evénement invoqué pendant un chargement.
onFileNotFound pUrl:String Evénement invoqué lorsque le fichier à charger n'a pas été trouvé.
onTimeOut pUrl:String Evénement invoqué lorsqu'un chargement fait un timeout.
onNoTarget Evénement invoqué lorsque la cible du chargement disparait.

Change log

[29/09/2004] Version 1.0

Création

[03/10/2004] Version 1.1

Mémorisation de l'url pour un affichage

[06/10/2004] Version 1.2

Ajout d'une nouvelle condition pour le chargement : Si la cible disparait ⇒ Il n'y a plus de chargement, on invoque l'événement onNoTarget

[18/02/2005] Version 1.3

Problème avec un attachMovie : j'ai ajoué un autre test pour le indicLoad, si VARloader.initBytes > 64

J'espère que ca ne va pas affecter d'autres trucs …

[12/10/2005] Version 1.4

Modification de la méthode _loadingEnterFrame, je teste le _currentframe

Source

import com.neolao.LogManager;
import com.neolao.controls.EnterFrame;
/**
 * Gestionnaire de chargement, classe abstraite
 * @author 		neolao <neo@neolao.com>
 * @version 		1.4 (12/10/2005)
 * @link		http://resources.neolao.com/flash/classes/controls/LoadManager			
 * @license		http://creativecommons.org/licenses/by-sa/2.5/	
 */
dynamic class com.neolao.controls.LoadManager {
	public var className:String = "LoadManager";
	public var version:String = "1.4";
 
	// ----------------------------- CONSTANTES --------------------------------
	/**
	 * Le timeout par defaut s'il n'est pas specifie
	 */
	private var DEFAULT_TIMEOUT:Number = 20000;
	/**
	 * Le temps de verification du 404
	 */
	private var DEFAULT_NOTFOUND:Number = 5000;
 
	// ----------------------------- VARIABLES ---------------------------------
	/**
	 * Objet qui va mémoriser des données concernant le chargement
	 * On l'utilise aussi comme objet de base pour le EnterFrame
	 */
	private var _loader:Object;
	/**
	 * La cible de la class
	 */
	private var _target:MovieClip;
	/**
	 * L'instance du contenu
	 */
	private var _content:MovieClip;
	/**
	 * Le nombre de millisecondes qui correspond au timeout
	 */
	private var _timeout:Number;
	/**
	 * L'url à charger
	 */
	private var _url:String;
	/**
	 * logs
	 */
	private var _log:LogManager;
	/**
	 * L'instance de la class instanciant LoadManager
	 */
	public var _parentClass:Object;
 
	// ----------------------------- EVENEMENTS --------------------------------
	/**
	 * Evénement invoqué lorsqu'un chargement est terminé
	 */
	public var onLoad:Function;
	/**
	 * Evénement invoqué pendant un chargement
	 * @param pBytesLoaded Le nombre de bytes chargés
	 * @param pBytesTotal Le nombre de bytes total
	 */
	public var onLoading:Function;
	/**
	 * Evénement invoqué lorsque le fichier à charger n'a pas été trouvé
	 * @param pUrl L'url du fichier
	 */
	public var onFileNotFound:Function;
	/**
	 * Evénement invoqué lorsqu'un chargement fait un timeout
	 * @param pUrl L'url du fichier
	 */
	public var onTimeOut:Function;
	/**
	 * Evénement invoqué lorsque la cible du chargement disparait
	 */
	public var onNoTarget:Function;
 
	/*============================= CONSTRUCTEUR =============================*/
	/*========================================================================*/
	/**
	 * Initialisation
	 */
	private function LoadManager(){
		_log = new LogManager("LoadManager");
 
		// Initialisation de la class EnterFrame
		EnterFrame.init();
 
		_loader = new Object();
	}
	/*======================= FIN = CONSTRUCTEUR = FIN =======================*/
	/*========================================================================*/
 
	/*=========================== METHODES PRIVEES ===========================*/
	/*========================================================================*/
	/**
	 * Méthode utilisé dans EnterFrame pour tester tout ce qu'il y a à tester
	 */
	private function _loadingEnterFrame(){
		var vBytesLoaded:Number = bytesLoaded;
		var vBytesTotal:Number = bytesTotal;
		var vEndDownload:Boolean = false;
 
		// Invoque l'evenement onLoading
		// Envoi des parametres bytes loade et byte total
		_onLoading(vBytesLoaded, vBytesTotal);
		_log.setAction("onLoading : " + vBytesLoaded + " / " + vBytesTotal + " ("+_content+")", 2);
 
		if(vBytesTotal > _loader.initBytes || _loader.initBytes > 64){
			// Il y a un chargement
			_loader.indicLoad = true
			_log.setInfo("Il y a un chargement", 3);
		}
 
		if(_loader.lastBytesLoaded != vBytesLoaded){
			// Les bytesLoaded sont differents
			_loader.stopLoadTime = getTimer();
		}
		_loader.lastBytesLoaded = vBytesLoaded;
 
		// --------------------------------------------- onNoTarget
		if(vBytesLoaded == undefined && vBytesTotal == undefined){
			_log.error = "La cible a disparu !";
			_onNoTarget();
			vEndDownload = true;
		}
		// --------------------------------------------- onLoad
		if(!vEndDownload && _loader.indicLoad){
			// Le chargement s'effectue
			if(vBytesLoaded == vBytesTotal && vBytesLoaded > 2 && content._currentframe > 0){
				// Le loading est termine
				_log.info = "Chargement terminé ! (" + _url + ")";
 
				// Invoque l'evenement onLoad
				_onLoad();
 
				// Le chargement doit s'arrêter
				vEndDownload = true;
			}
		}
		// --------------------------------------------- onFileNotFound
		if(!vEndDownload && (vBytesTotal < 0 || vBytesTotal == _loader.initBytes) && (getTimer() - _loader.startTime > DEFAULT_NOTFOUND)){
			// Aucun fichier trouve
			_log.error = "File not found ! (" + _url + ")";
 
			// Invoque l'evenement onFileNotFound
			_onFileNotFound(_url);
 
			// Le chargement doit s'arrêter
			vEndDownload = true;
		}
		// --------------------------------------------- onTimeOut
		if(!vEndDownload && _loader.indicLoad && getTimer() - _loader.stopLoadTime > timeout){
			// Le chargement ne se fait plus depuis un certain temps defini
			// Il y a time out
			_log.error = "Timeout ! (" + _url + ")";
 
			// Invoque l'evenement onTimeOut
			_onTimeOut(_url);
 
			// Le chargement doit s'arrêter
			vEndDownload = true;
		}
 
		if(vEndDownload){
			// Le chargement s'arrête pour un événement quelconque
			// Supprime le enterFrame du loading
			EnterFrame.removeListener(this);
		}
	}
	/**
	 * Méthode du onLoad
	 */
	private function _onLoad(){
		this.onLoad.apply(this, arguments);
	}
	/**
	 * Méthode du onLoading
	 */
	private function _onLoading(){
		this.onLoading.apply(this, arguments);
	}
	/**
	 * Méthode du onFileNotFound
	 */
	private function _onFileNotFound(){
		this.onFileNotFound.apply(this, arguments);
	}
	/**
	 * Méthode du onTimeOut
	 */
	private function _onTimeOut(){
		this.onTimeOut.apply(this, arguments);
	}
	/**
	 * Méthode du onNoTarget
	 */
	private function _onNoTarget(){
		this.onNoTarget.apply(this, arguments);
	}
	/*===================== FIN = METHODES PRIVEES = FIN =====================*/
	/*========================================================================*/
 
	/*============================ GETTER  SETTER ============================*/
	/*========================================================================*/
	/**
	 * Les bytes chargés
	 * Il faut surcharger ca
	 */
	public function get bytesLoaded():Number{
		return -1;
	}
	/**
	 * Les bytes totaux
	 * Il faut surcharger ca
	 */
	public function get bytesTotal():Number{
		return -1;
	}
	/**
	 * Le nombre de millisecondes qui correspond au timeout
	 */
	public function set timeout(pTimeout:Number){
		_timeout = pTimeout;
	}
	public function get timeout():Number{
		var vTimeout:Number = DEFAULT_TIMEOUT;
 
		if(_timeout != undefined){
			vTimeout = _timeout;
		}
		return vTimeout;
	}
	/**
	 * L'instance de la cible (différent du contenu, mais ca peut être le même)
	 */
	public function set targetInstance(pTarget:MovieClip){
		_target = pTarget;
	}
	public function get targetInstance():MovieClip{
		return _target;
	}
	/**
	 * L'url à charger
	 */
	public function get url():String{
		return _url;
	}
	/**
	 * L'instance du contenu chargé
	 */
	public function get content():MovieClip{
		return _content;
	}
	/*====================== FIN = GETTER  SETTER = FIN ======================*/
	/*========================================================================*/
 
	/*========================== METHODES PUBLIQUES ==========================*/
	/*========================================================================*/
	/**
	 * Lance le chargement
	 * @param pUrl Une url ou un symbole lié
	 */
	public function load(pUrl:String){
		_url = pUrl;
		_log.action = "load : Chargement de \"" + pUrl + "\"";
 
		// On enregistre le temps de depart du load
		_loader.startTime = getTimer();
		// On memorise le temps du dernier arret de loading
		_loader.stopLoadTime = getTimer();
 
		// On enregistre la taille du clipLoader avant le chargement
		// Ca va servir pour le chargement, pour savoir s'il y en a un justement
		_loader.initBytes = (bytesTotal != -1)?bytesTotal:-1;
 
		// On affecte la fonction de chargement au EnterFrame
		EnterFrame.addListener(this, _loadingEnterFrame);
	}
	/*==================== FIN = METHODES PUBLIQUES = FIN ====================*/
	/*========================================================================*/
}