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
Aee Anaya, muito bom!
Congrats
Nice work! Dude!