DataLib – New release of the loader class

DataLib é uma classe de loading que controla todos os requests da sua aplicação e armazena todos os arquivos carregados para futuras solicitações. Eu venho usando sua versão anterior a mais ou menos um ano e meio e até agora ela vem trabalhando bem, mas eu decidi lançar uma nova versão com mais recursos e melhor usabilidade.

O conceito é simples. Cada instância da DataLib tem uma fila de carregamento, e cada instância é colocada numa fila de carregamento geral. Por padrão, 3 itens podem ser carregados por vez, mas você pode mudar o número de arquivos que podem ser carregados simultaneamente. Dessa forma um arquivo gigante não segura a sua aplicação até ser carregado, você pode usar outros slots para carregar o resto dos arquivos que sua aplicação precisa.

Outra vantagem é que você pode carregar arquivos de url’s dinâmica, por exemplo um php que retorna um xml ou imagem dependendo dos parâmetros enviados.

Você pode também acessaro qualquer dado carregado a partir de qualquer lugar de sua aplicação mesmo que não tenha acesso a instância que solicitou o carregamento. Isso porque todos os arquivos são armazenados na classe estática. Outra coisa é que se você fizer um request de arquivo que ja foi carregado, o DataLib pega os dados da biblioteca, economizando algum (ou muito) tempo de carregamento. Caso você se preocupe com o uso de memória, é possivel excluir arquivos da biblioteca a qualquer momento.

A utilização é simples. Cria uma instância do DataLib e adicione quantos itens você precisar na fila de carregamento. Você precisar enviar o caminho ou URLRequest e o tipo de arquivo. Opcionalmente você pode enviar um objeto que será retornado quando o o arquivo for carregado. Para imagens e swf, você pode enviar um loaderContext, caso não passe nenhum, o DataLib utilizará um loaderContext default (checkPolicyFile false, current application domain e sem security domain). Toda vez que você adiciona um item na fila de carregamento ele é retornado como uma instância de DataLibItem, essa instância extende um EventDispatcher, logo você pode adicionar eventos para fila inteira ou para cada item.

import com.andreanaya.net.DataLib;
 
var dataLib:DataLib = new DataLib();
 
dataLib.addItem("image.jpg", DataLib.TYPE_IMAGE).addEventListener(DataLibEvent.PROGRESS, onItemProgress);
 
var request:URLRequest();
request.url = "mylist.php";
 
var variables:URLVariables = new URLVariables();
variables.product = "car";
variables.color = "red";
 
request.data = variables;
 
request.method = URLRequestMethod.POST;
 
var item:DataLibItem = dataLib.addItem(request, DataLib.TYPE_TEXT, {totalCars:2});
item.addEventListener(DataLibEvent.COMPLETE, onItemComplete);
 
dataLib.addEventListener(DataLibEvent.COMPLETE, onComplete);
 
dataLib.load();
 
function onItemProgress(e:DataLibEvent):void
{
	trace("loading", e.id, Math.floor(e.bytesLoaded*100/e.bytesTotal)+"%");
}
 
function onItemComplete(e:DataLibEvent):void
{
	var xml:XML = new XML(e.data);
	trace(xml, e.returnObject.totalCars);
}
 
function onComplete(e:DataLibEvent):void
{
	var image:Bitmap = DataLib.getData("image.jpg");
	addChild(image);
}

Cada arquivo tem um id atrelado a ele. Esse id é a própria url do arquivo, por exemplo image.jpg. Para arquivos carregados a partir de um URLRequest com parâmetros, o id é formado pela url e os paramêtros, por exemplo mylist.php?product=car&color=red. Mesmo que o request method seja POST, o id do arquivo é definido como se fosse um endereço GET.

O id é utilizado para resgatar dados carregados da biblioteca.

var image:Bitmap = DataLib.getData("image.jpg");
addChild(image);

Você pode utilizar também um URLRequest como parâmetro do método getData.

var request:URLRequest();
request.url = "mylist.php";
 
var variables:URLVariables = new URLVariables();
variables.product = "car";
variables.color = "red";
 
request.data = variables;
 
request.method = URLRequestMethod.POST;
 
var xml:XML = new XML(DataLib.getData(request));

O id é utilizado também para remover, mudar a prioridade e excluir itens da fila de carregamento ou da biblioteca.

Baixe os arquivos fonte e a documentação no google code:
http://code.google.com/p/datalib/

Veja a documentação aqui:
http://www.andreanaya.com/datalib/doc/

Você pode fazer o download de um exemplo de uso aqui:
http://www.andreanaya.com/datalib/DataLib_example.zip

2 Responses to “DataLib – New release of the loader class”

  1. Bruno Soares says:

    Aee Anaya, muito bom!
    Congrats

Leave a Reply