まだベータですが試してみましたのでつらつらと書いていきます。
参考
公式サイト
マイコミの紹介
javaとairを繋ぐmerapiを使ってみた。
まずはJava側の実装から
merapi本体を解凍した中にある framework/java/libs にあるのがJava側で必要なライブラリ
適当なクラスを作って、IMessageHandler を implements する
public static void main の中で Bridge クラスに、自身を regist する
public class MerapiTest implements IMessageHandler {
public static void main(String[] args) {
System.out.println("start");
Bridge.getInstance().registerMessageHandler("merapiSample", new MerapiTest());
}
}
第一引数でBridgeに登録するID(タイプと呼ぶらしい)、第二引数が自身のJavaクラスのインスタンス
flexから呼ばれた時に handleMessage がcallされるのでこれをクラスに書いておく(インターフェース定義されてます)
public void handleMessage(IMessage obj) {
try {
System.out.println("flex > java :"+((Message)obj).getData());
Message response = new Message("merapiSample", "hello merapi");
Bridge.getInstance().sendMessage(response);
} catch(Exception e) {
System.out.println("Caught Exception");
}
}
IMessageというのがFlexから受け取るデータ、MessageにキャストしてgetDataすると中身を取得出来る。
System.out.println("flex > java :"+((Message)obj).getData());
void なんで return値はなし、Flexに情報を返したい場合は Bridge の sendMessageを使う。
Messageの第一引数にregistしたのと同じIDを指定、第二引数に送りたいデータをセットする。
Message response = new Message("merapiSample", "hello merapi");
Bridge.getInstance().sendMessage(response);
続いてFlex側の実装
merapi本体を解凍した中にある framework/flex/libs にあるのがflex側で必要なライブラリ
まずはBridgeのインスタンスを作成する
<merapi:BridgeInstance id="bridge" result="handleMessage(event)" />
こっちはresultのfunction名を指定出来る、Javaと同じにしとといた方がわかりやすいかもね!
メッセージの送信は以下のように
var message:Message = new Message("merapiSample","from flex");
bridge.sendMessage(message);
MessageクラスはJavaとおんなじ使い方でOK
実行方法
まずは java のクラスを起動してやる必要がある
起動して regist した時点で listen 状態で待機される
この状態でFlexを起動してやると、メッセージを送信出来る
Flexが終了した時点でJavaも落ちる
欠点はJavaを起動する必要がある所かな・・・
終了は一緒に終わってくれるので問題なさそうだけど、Airの起動時にJavaが動いてないとエラーになるんで
なんとかしてJavaを起動してAirを起動するような仕組みが必要
うまく使えばクライアントサイドで今以上に色んな事が出来そうですね!
Grailsとの絡みで考えると、Grails1.1からGORMが単体で使えるようになっているのでsqliteを使った生なDBでなく、GORMを使ってHSQLとかでクライアントDBを実装出来たら素敵な気がする!
0 件のコメント:
コメントを投稿