Afcs : com.adobe.rtc.pods.SimpleChat でチャット作成

| コメント(0) | トラックバック(0)

Afcs を使って、簡単なチャットアプリケーションを作成します。

サンプルは、ユーザ名とパスワードを入力するダイアログですが、パスワードの入力が必要なのは、Adobe ID を入れた場合に必要になります。
ゲストログインする場合は、ラジオボタンで「guest」を選択して、任意のユーザ名を入力してログインすることが可能です。


com.adobe.rtc.pods.SimpleChat を使用したサンプルです。

* Login ボタンを押してから、チャットが表示されるまでしばらく時間が掛かることがあります。

以下のサンプルの開発条件として、「Afcs SDK 0.91」を参照できる環境が整っている必要があります。

 

今回、初めて Afcs のサンプルコードを作りましたが、API リファレンスをはじめとする全てのドキュメントが、英語で書かれているため、なかなか理解が難しく、思うようにコードが書けませんでした。
SDK 内包のサンプルや、 API リファレンスを見て大体の動きを読み取り、コードを書きながら動きを確認して実行するといった作業の繰り返しで作ったので、正しい使い方なのかは不明です。


メインの画面デザインから

■ chatAfcs.mxml

5 ~ 7行目は、チャットコントロールを使用するために必要なクラスパッケージです。*.as 側に書いている inport 文みたいなものです。
今回とても重要な部分は、13 ~ 23行目です。
『 <ns1:ConnectSessionContainer 』から始まる部分。ここは Afcs サービスとのセッションを管理するオブジェクトです。このオブジェクトは必須となります。
13 ~ 23行目の間に、Afcs のチャットコントロールを配置する必要があります。
セッションが正常に確立されると、13 ~ 23行目の中に配置したオブジェクトがロードされます。
『 <ns1:ConnectSessionContainer 』の属性で、19行目に設定している『autoLogin』の設定ですが、これを「true」に設定すると、「initialRoomSettings」に予め設定された userName(guest アカウントでも可)、password で自動的にログインされ、セッションが確立します。セッションオブジェクト内に定義したコントロールが、セッション確立時にロードされます。
『autoLogin』を「false」に設定した場合、正常にログインしてセッションの確立がされるまで、セッションオブジェクト内に配置したコントロールが、ロードされないことになります。
ここでは「false」の設定をし、画面ロード時にはセッションオブジェクト内のチャットコントロールはロードされない設定にしています。最初に表示されるログインダイアログでログインを実行し、セッションの確立が完了したタイミングでチャットコントロールが表示されます。

チャットのコントロールオブジェクトですが、驚く事に、実質たった一行書くだけで実装できてしまいます。すごいぞ ADOBE
20行目 『<ns3:SimpleChat ~』が、そのチャットコントロールに該当します。チャットコントロール以外は、ログインしているユーザのリストと、ログアウトボタンのコントロールだけを配置しているだけですね。
今回のように、「SimpleChat」のコードを書くとチャットに必要なコントロールが全て自動的に配置されますが、代わりに「SimpleChatModel」を使うことで、開発者が独自にチャット内のコントロールを配置することも可能です。

 

メイン画面のロジック部分です
■ chatMain.as

3 ~ 7行目は、チャットコントロールを使うために必要な Afcs のクラスパッケージの参照です。
8 ~ 36行目は、通常の Flex アプリケーションで多用するコードなので、説明を省きます。
37行目からの処理は、初期設定を行っていますが、アプリケーション開始時に、ログインダイアログである別画面をモーダル表示しています。
55行目では、ログイン画面のログインボタンを押された際のイベントを受け取る設定をしています。
60 ~ 57行目の「SetAdobeHSAuthenticator()」メソッドは、画面側「chatMain.as」の13行目から記述している、コネクションセッションコンテナオブジェクト(ConnectSessionContainer) のプロパティである「authenticator」に格納するオブジェクトの設定をしています。
ネット上 や、SDK 内包のサンプルでは、ここにデベロッパーの 「ADOBE ID」とパスワードを記述するようなものがほとんどですが、ID、パスワードを平文でハードコードするのはセキュリティ上好ましくないので、実際に利用するユーザが入力したものを使うようにしています。
なので、userName password は null で初期値設定しています。
70 ~ 78行目の「SetRoomSettings()」メソッドも、画面側「chatMain.as」の13行目から記述している、コネクションセッションコンテナオブジェクト(ConnectSessionContainer) のプロパティである「initialRoomSettings」に格納するオブジェクトの設定をしています。
77行目で「autoPromote」プロパティを true に設定しているのは、自動的に、入室した Room の誰かのビューア権限をパブリッシュ権限に昇格させる設定をしています。おそらくこれをやっておくことで guest ユーザでもパブリッシュが可能になるものと思われます。
81 ~ 87行目の「SetConnectSessionContainer()」メソッドでは、上記で設定したオブジェクトを、コネクションセッションコンテナオブジェクト(ConnectSessionContainer) のプロパティに格納しています。
アプリケーションの初期処理でモーダル表示した、ログインダイアログ画面から「Login」ボタンが押されると、90行目の「setLogin(e:Event)」メソッドが実行されます。
ログインダイアログの画面で「Login」ボタンが押されると、「userName」と「password」が格納された「AdobeHSAuthenticator」が生成され、通知されたイベントオブジェクトのプロパティに格納されています。このオブジェクトを画面側「chatMain.as」の13行目から記述している、コネクションセッションコンテナオブジェクト(ConnectSessionContainer) のプロパティである「authenticator」に格納しています。
101行目では、ログインダイアログの画面から設定された情報で Afcs へのログインが成功した際のイベントリスナーを追加しています。
104行目では、メイン画面上に配置された ConnectSessionContainer オブジェクトの、ロード処理が完了した際のイベントリスナーを追加しています。
これで、ログインに必要な情報を全てコネクションセッションコンテナオブジェクトに設定できたので、107行目でログインを実行しています。
114行目で、ログインダイアログを閉じています。(ログイン成功時)
メイン画面上に配置された ConnectSessionContainer オブジェクトの、ロード処理が完了したタイミングで、118行目からの処理が実行され、セッションオブジェクトの中から、現在ログインしているユーザのリストを参照し、List コントロールにバインドしています。
124行目で、ログアウトボタンクリックイベントリスナーを追加しています。
128行目から、ログアウトボタンクリックイベントの処理を記述しています。
本来ならばログアウトさせた直後に、また処理を最初から実行し、ログインダイアログを出したかったのですが、ログアウトを掛けて違うユーザでログインしても、前回のセッション情報が残ったままで、意図したように動作しなかったため、今回はコネクトセッションコンテナごと削除して終了するようにしてしまいました。
なので、ログアウトして再度ログインする場合にはブラウザで、ページのリロードを行うことで、別ユーザでログインすることができます。だれか良い方法知っていたら教えてください。
またこの辺りは時間のあるときに調査してみようと思う。

 

ログインダイアログの画面デザインです。
■ LoginDialog.mxml


ここでは、特別なことはしていないので説明はありません。

 

ログインダイアログ画面のロジック部です。
■ LoginDialogMain.as

ログインダイアログ画面で入力された userName password を、AdobeHSAuthenticator オブジェクトに格納し、クラスのプロパティに格納してイベント通知しているだけです。

 

最後に、今回初めて触ってみた Afcs ですが、『簡単に使える』といわれている割には結構理解に苦しむところが多く、簡単にはいきませんでした。
特にセッション管理のあたりのタイミングとかAPIの使い方とかが、思っていたよりも扱いにくかった印象です。
しかしながら、セッション管理の辺りは、ある程度パターンが決まってくるのではないかと思われ、ここだけ理解できてしまえば、確かに簡単なのかもしれません。

次は、ホワイトボードの共有について記述予定です。

トラックバック(0)

トラックバックURL: http://gallop.ddo.jp/cgi-bin/mt/mt-tb.cgi/535

コメントする

このブログ記事について

このページは、が2009年2月22日 15:40に書いたブログ記事です。

ひとつ前のブログ記事は「ADOBE FLASH COLLABORATION SERVICE (旧Cocomo) がすごい」です。

次のブログ記事は「Afcs : com.adobe.rtc.pods.SharedWhiteBoardで共有ホワイトボード作成」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。