BlazeDSの主要な機能の一つであるRemotingのクライアントサイドの処理について。
-
「ファイル > 新規 > MXML アプリケーション」をクリックして、「ファイル名」にRemoting.mxmlと入力して、「終了」。

-
remoting.mxmlにクライアントの処理を書く。
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" initialize="init()" viewSourceURL="srcview/index.html">
-
-
<mx:Script>
-
<![CDATA[
-
import mx.rpc.remoting.RemoteObject;
-
import mx.rpc.events.ResultEvent;
-
import mx.rpc.events.FaultEvent;
-
-
private var remoteObject:RemoteObject = new RemoteObject();
-
-
private function init():void {
-
initRemoteObject();
-
initButtons();
-
}
-
-
private function initRemoteObject():void {
-
remoteObject.destination = "remotingTutorial";
-
remoteObject.addEventListener("result", hdlROResult);
-
remoteObject.addEventListener("fault", hdlROFault);
-
}
-
-
private function hdlROResult(re:ResultEvent):void {
-
var result:int = re.message.body.result;
-
setResult(result.toString());
-
}
-
-
private function hdlROFault(fe:FaultEvent):void {
-
setResult("Fail to get responce.");
-
}
-
-
private function setResult(str:String):void {
-
tiResult.text = str;
-
}
-
-
private function initButtons():void {
-
btnCalc.addEventListener(MouseEvent.CLICK, hdlGetCalcClick);
-
btnClear.addEventListener(MouseEvent.CLICK, hdlClearClick);
-
-
btnCalc.enabled = true;
-
btnClear.enabled = true;
-
}
-
-
private function hdlGetCalcClick(me:MouseEvent):void {
-
var obj:Object = new Object();
-
-
obj.param0 = int(tiParam_0.text);
-
obj.param1 = int(tiParam_1.text);
-
-
remoteObject.getCalcResult(obj);
-
}
-
-
private function hdlClearClick(me:MouseEvent):void {
-
setResult("");
-
}
-
-
]]>
-
</mx:Script>
-
-
<mx:ApplicationControlBar>
-
<mx:TextInput id="tiParam_0" text="10"/>
-
<mx:Label text="+" textAlign="center"/>
-
<mx:TextInput id="tiParam_1" text="20"/>
-
<mx:Label text="=" textAlign="center"/>
-
<mx:TextInput id="tiResult"/>
-
</mx:ApplicationControlBar>
-
<mx:ApplicationControlBar>
-
<mx:Button label="getCalcResult" id="btnCalc" enabled="false"/>
-
<mx:Button label="clear" id="btnClear" enabled="false"/>
-
</mx:ApplicationControlBar>
-
-
</mx:Application>
-
「ファイル > エクスポート」より、「Flex Builder > リリースビルド」を選択して「次へ」。「書き出し先フォルダ」をtutorialにして、「終了」。


-
これで、クライアントの開発は完了。ブラウザでhttp://localhost:8400/tutorial/remoting.htmlにアクセスして確認。
開発中のTweenerの最新バージョンにはFilterの機能が付いているらしい。
リポジトリのURLとかFilterのレビューしてる方のURLとかをメモっとく。
- リポジトリのURL
- Google Code - Tweener SVN Trunk
- Google Code - Tweener Checkout
- Google Code Tweener
- Google Code - Tweener
- Filterのレビュー
- 閃光的網站・弛緩複合体 -Review Division- - Tweener のさらなる進化
iG:Syntax Hiliter同梱のGeSHiライブラリはActionScript 2.0対応だったので、ActionScript 3.0に対応したライブラリを公開します。
- 表示サンプル
-
- iG:Syntax Hiliterの特徴
-
- クライアントサイドではなく、サーバーサイドでワードとのマッチングを行うため高速。
- cssでコードハイライトを行わず、htmlにスタイルを埋め込む。
- 大文字・小文字を別のものとしてマッチングしてくれる。('function'と'Function'など)
- '*'をマッチングしてくれる。
- 公開しているファイルに関する注意点
-
- 「plugins > ig_syntax_hilite > geshi > actionscript.php」と入れ替えてお使い下さい。(バックアップをお忘れなく。)
- GeSHiライブラリ依存のファイルです。
- GeSHi本体は付属しません。
- ライセンスはファイル内に記述しています。(GNU GPLライセンス)
- 'gt','lt'はhtmlの実体参照と競合するため、意図的にコメントアウトしています。
- 他に上記5.の様なパターンを発見された場合お知らせ下さい。
- ダウンロード
-
- iG:Syntax Hiliter日本語化・不具合修正
-
- iG:Syntax Hiliter導入方法・カスタマイズ
-
- その他のコードハイライター
-
dp.SyntaxHighlighterはJavaScriptベースでコードを色分けしていく。
クライアントでの処理の為、色分けすべきストリングの量が多くなればなるほど、行数が多くなればなるほど表示までに時間が掛かってしまう。
ActionScript全てのグローバル関数を入れた結果、表示が劇的に遅くなってしまった。
そこで、PHPでコードを色分けしてくれるiG:Syntax Hiliterを試してみることに。
同梱のGeSHiライブラリはActionScript 2.0のみ対応だったので、ついでにActionScript 3.0にも対応してみた。
ActionScript 2.0の場合
-
/**
-
* ActionScript2 powered by iG:Syntax Hiliter
-
*/
-
function test():Void {
-
var mc:MovieClip = new MovieClip();
-
var str:String = "test";
-
-
mc._visible = false;
-
}
-
function test():* {
-
mc._visible = false;
-
}
ActionScript 3.0の場合
-
/**
-
* ActionScript3 powered by iG:Syntax Hiliter
-
*/
-
import flash.display.Sprite;
-
import flash.events.Event;
-
import flash.events.MouseEvent;
-
// 円を描画し、表示リストに追加する。
-
var sprCircle:Sprite = new Sprite();
-
sprCircle.graphics.beginFill(0x990000);
-
sprCircle.graphics.drawCircle(50, 50, 50);
-
sprCircle.graphics.endFill();
-
addChild(sprCircle);
-
function fadeCircle(event:Event):void {
-
sprCircle.alpha -= .05;
-
-
if (sprCircle.alpha <= 0) {
-
sprCircle.removeEventListener(Event.ENTER_FRAME, fadeCircle);
-
}
-
}
-
function startAnimation(event:MouseEvent):void {
-
sprCircle.addEventListener(Event.ENTER_FRAME, fadeCircle);
-
}
-
sprCircle.addEventListener(MouseEvent.CLICK, startAnimation);
- 感想
-
- AS2とAS3で3000ワードとマッチングしてるけど表示が早い。(同じコードをdp.SyntaxHighlighterで表示したところ6秒くらいかかったのが、iG:Syntax Hiliterだと2秒くらいで表示された。)
- 吐かれるhtmlソース内にスタイル押し付けてるのが惜しい。クラスだけ押し付けて、スタイル部分はCSSに託す(dp.SyntaxHighlighter形式)ように再開発されないかな・・・
- コレ自体にスタイル反映させるのがわりと簡単。(ただしここでもやっぱり吐かれるhtmlソース自体にスタイル押し付けてる部分があるので、改変が必要。)
- 3000ワードマッチングとかするんだとiG:Syntax Hiliterがよいかと。
ActionScript 3.0に対応したactionscript.phpは整理し終わったら公開します。
追記 08/02/04 公開しました。 - iG:Syntax HiliterでActionScript 3.0をハイライト
dp.SyntaxHighlighterでActionScriptのコードをハイライトする際に、ActionScriptのキーワード達が列挙されているソースが見つからなかったのでまとめました。
言語エレメントには、グローバル定数・演算子・ステートメント、キーワード、ディレクティブ・特殊な型の単語が格納されています。
コアクラス・グローバル関数には、コアクラスに属するメソッド・プロパティの単語が格納されています。
Flashをお持ちの方にさらに簡易な説明を付け加えておきます。
Flashで「メニュー>編集>環境設定>ActionScript>シンタックスカラー」の、「キーワード」が言語エレメントに相当し、「識別子」がコアクラス・グローバル関数に相当します。
- ダウンロード
-
- 追記
-
08/02/04 dp.SyntaxHighlighterからiG:Syntax Hiliterへ移行のため、サポート停止。