Tout d'abord concernant masapi, il y a une série d'examples sur les différentes parties de l'API. J'ai également mis la documentation en ligne.

Dans la dernière version (1.1), une nouvelle classe a été ajoutée afin de faciliter l'utilisation d'un MassLoader qui gère les priorité : la classe CompositePriorityMassLoader.

import ch.capi.net.*;
 
var cpl:CompositePriorityMassLoader = new CompositePriorityMassLoader();
 
var file1:ILoadableFile = cpl.addPrioritizedFile("engine.swf", 10); //loaded second
var file2:ILoadableFile = cpl.addPrioritizedFile("config.xml", 15); //loaded first
var file3:ILoadableFile = cpl.addPrioritizedFile("aSWF", 0, LoadableFileType.SWF); //loaded third
var file4:ILoadabelFile = cpl.addFile("aPicture.jpg", LoadableFileType.BINARY); //loaded fourth (priority=0)
 
cpl.start();

La gestion basique est assez simple : plus la priorité est élevée, plus le fichier a d'importance.

Il est intéressant d'observer le comportement de la classe PriorityMassLoader pour charger les fichiers. Le comportement par défaut va procéder de manière à charger ensemble tous les fichiers ayant le même ordre de priorité :

import ch.capi.net.*;
import ch.capi.events.*;
 
var cpl:CompositePriorityMassLoader = new CompositePriorityMassLoader();
 
var file1:ILoadableFile = cpl.addPrioritizedFile("engine.swf", 10);
var file2:ILoadableFile = cpl.addPrioritizedFile("config.xml", 15);
var file3:ILoadableFile = cpl.addPrioritizedFile("aSWF", 0);
var file4:ILoadabelFile = cpl.addFile("aPicture.jpg");
var file5:ILoadableFile = cpl.addPrioritizedFile("otherSWF", 10);
 
cpl.massLoader.addEventListener(MassLoadEvent.FILE_OPEN, onFileOpen);
cpl.massLoader.addEventListener(MassLoadEvent.FILE_CLOSE, onFileClose);
cpl.massLoader.addEventListener(PriorityEvent.PRIORITY_CHANGED, onPriorityChanged);
 
cpl.start();
 
function onFileOpen(evt:MassLoadEvent):void { trace("open : "+(evt.file as ILoadableFile).urlRequest.url); }
function onFileClose(evt:MassLoadEvent):void { trace("close : "+(evt.file as ILoadableFile).urlRequest.url); }
function onPriorityChange(evt:PriorityEvent):void { trace("new priority : "+evt.currentPriority; }

La sortie suivante sera affichée :

new priority : 15
open : config.xml
close : config.xml
new priority : 10
open : engine.swf
open : otherSWF
close : engine.swf
close : otherSWF
new priority : 0
open : aSWF
open : aPicture.jpg
close : aSWF
close : aPicture.jpg

Le PriorityMassLoader force un fichier avec une priorité élevée à être complètement chargé avant de lancer le chargement d'un autre fichier moins important. Cela peut être très utile, notamment lorsque les fichiers sont inter-dépendants et que certains ont absolument besoin que d'autres soient chargés afin de pouvoir fonctionner.

Bien évidemment, ce comportement peut être changé simplement en mettant la variable loadByPriority à false. Dans ce cas, c'est la variable parallelFiles qui sera prise en compte pour savoir combien de fichiers doivent être chargés simultanément (en tenant compte de la priorité).

import ch.capi.net.*;
import ch.capi.events.*;
 
var cpl:CompositePriorityMassLoader = new CompositePriorityMassLoader();
var pml:PriorityMassLoader = cpl.massLoader as PriorityMassLoader;
pml.loadByPriority = false;
pml.parallelFiles = 3; //3 files at the same time
 
var file1:ILoadableFile = cpl.addPrioritizedFile("engine.swf", 10);
var file2:ILoadableFile = cpl.addPrioritizedFile("config.xml", 15);
var file3:ILoadableFile = cpl.addPrioritizedFile("aSWF", 0);
var file4:ILoadabelFile = cpl.addFile("aPicture.jpg");
var file5:ILoadableFile = cpl.addPrioritizedFile("otherSWF", 10);
 
cpl.start();

Pour terminer, il y a le googlegroup de masapi sur lequel j'annoncerai les futures mises à jour et tutoriaux ! Pour les intéressés, inscrivez-vous :)

L'étape suivante est la gestion des dépendances entre fichiers !