Masapi: Flex/Flash/AIRで大量ファイルをロード用のオープンソースのフレームワーク

「Masapi」とは、Flex/Flash/AIRで大量ファイルをロードする用のオープンソースのAS3フレームワークです。URLLoaderやLoaderというクラスと同じインタフェースを持っています。

※URLLoader クラスは、指定した URL からテキスト、バイナリデータ、または URL エンコード形式の変数をダウンロードする際に使用します。動的なデータ駆動アプリケーションで使用するテキストファイル、XML、その他の情報をダウンロードする場合に便利です。

URLLoader オブジェクトは、データを ActionScript で使用できるようにする前に、それらのすべてのデータを URL からダウンロードします。URLLoader オブジェクトは、ダウンロードの進捗に関する通知を送信します。これらは、送出済みのイベント、さらには bytesLoaded および bytesTotal プロパティで監視できます。

「Masapi」は以下の特徴を持っています。

・Same interface for all load managers (URLLoader, Loader, …)
・Easy massive loading classes
・Advanced massive loading (priority, dependencies)
・Advanced massive loading management (loading policy, loading information, …)

[使用方法]

1)、次のURLから最新版をダウンロードします。

http://code.google.com/p/masapi/downloads/list

2)、プロジェクトに追加する

プロジェクトに追加するため、クラスパスに「ch」というフォルダが必要です。「chフォルダをFLAと同じフォルダに置く」と「srcフォルダをクラスパスに追加する(File > Publish settings > Flash > ActionScript 3 settings)」ってのいずれかもできます。

クラスパスに追加した上で、以下の様のソースで使えるかどうか確認します。


import ch.capi.net.*;
import ch.capi.events.*;

var ml:MassLoader = new MassLoader();
ml.addEventListener(MassLoadEvent.FILE_OPEN, onFileOpen);

function onFileOpen(evt:MassLoadEvent):void { trace(”open”); }

正常で動作するとMasapiのインストールは完了します。

以下は「CompositeMassLoader」というクラスを利用してリスト中の何個ファイルをロードする例です。


import ch.capi.net.*;

//creates the MassLoader
var cml:CompositeMassLoader = new CompositeMassLoader();

//creates & add the files to the MassLoader
cml.addFile(”myFile.txt”); // will use a URLLoader object with the URLLoaderDataFormat.VARIABLES property
cml.addFile(”myFile.xml”); // will use a URLLoader object with the URLLoaderDataFormat.TEXT property
cml.addFile(”myFile.css”); // will use a URLLoader object with the URLLoaderDataFormat.TEXT property
cml.addFile(”myFile.png”); // will use a URLLoader object with the URLLoaderDataFormat.BINARY property
cml.addFile(”myFile.png”, LoadableFileType.SWF); // will use a Loader object
cml.addFile(”myFile.jpg”); // will use a URLLoader object with the URLLoaderDataFormat.BINARY property
cml.addFile(”myFile.swf”); // will use a Loader object
cml.addFile(”myFile.swf”, LoadableFileType.BINARY); // will use a URLLoader object with the URLLoaderDataFormat.BINARY property

//starts the loading
cml.start();

//useful information for debugging
//trace(cml.massLoader);

次は「Masapi」のローディングイベントを監視する例:


import ch.capi.net.*;
import ch.capi.events.*;

//creates the MassLoader
var cml:CompositeMassLoader = new CompositeMassLoader();

cml.massLoader.addEventListener(ProgressEvent.PROGRESS, onOverallProgress); //overall progression
cml.massLoader.addEventListener(MassLoadEvent.FILE_OPEN, onOpenHandler); //a file download starts
cml.massLoader.addEventListener(Event.COMPLETE, completeHandler); //massload complete

//… (creates the files and so on)

//listen to the overall progression
function onOverallProgress(evt:ProgressEvent):void
{
var percent:Number = Math.round(evt.bytesLoaded / evt.bytesTotal * 100);
trace(”Loaded at “+percent+”%”);
}

//listen when a file begins to be loaded
function onOpenHandler(evt:MassLoadEvent):void
{
var file:ILoadableFile = evt.file as ILoadableFile;
file.addEventListener(ProgressEvent.PROGRESS, onFileProgress);
}

//listen to a specific file
function onFileProgress(evt:ProgressEvent):void
{
trace(”file progress”);
}

//listen to the complete event
function completeHandler(evt:Event):void
{
trace(”MassLoad complete”);
}

//starts the loading
cml.start();

大量のファイルがあるので、ローディングのステータスの取得が必要となります。以下はステータスを取得する例:

import ch.capi.net.*;
import ch.capi.events.*;

//creates the MassLoader
var cml:CompositeMassLoader = new CompositeMassLoader();
cml.massLoader.addEventListener(ProgressEvent.PROGRESS, onProgress);
//…

function onProgress(evt:ProgressEvent):void
{
var info:ILoadInfo = evt.target.loadInfo;
//var info:ILoadInfo = cml.loadInfo;
trace(info.currentSpeed);
trace(info.averageSpeed);
trace(info.elapsedTime);
trace(info.remainingTime);
trace(info.percentLoaded);
trace(info.ratioLoaded);
trace(info.bytesLoaded+” / “+info.bytesTotal);
}

[関連リンク]

http://code.google.com/p/masapi/ 公式サイト

Leave a Reply

Your email address will not be published. Required fields are marked *