ドラッグ&ドロップ
ローカルにある画像ファイルを読み込んでボードに貼り付けます。
処理概要
- ドロップ対象が、ドロップを受け入れる状態にする。
- ドロップされた画像ファイルをサーバへ送信する。
(ShareBoardAIR.mxml)91行目~95行目
ボードの外枠となるオブジェクト「canvasFrame」に、ドラッグ中のマウスカーソルが重なった時に実行されるイベントリスナを追加しています。サーバと接続中で、かつドラッグされているものがファイルだった場合に、ドラッグを受け入れる状態にしています。マウスカーソルがドロップ可能マークに変わるようになります。
(ShareBoardAIR.mxml)96行目~119行目
ドロップされたファイルの拡張子を確認し、画像ファイルであった場合にはその内容を読み込み、サーバへ送信しています。読み込まれた画像はここで直接貼り付けているのではなく、サーバを介していることになります。
ローカルファイル書き出し
画像が貼り付けられたり、描き込みがされている状態のボードのスクリーンショットをJPEGでローカルファイルに保存しています。
(ShareBoardAIR.mxml)260行目~262行目
キャプチャしたボードの画像を、環境構築時に読み込み設定したライブラリを使用して、JPEGに変換しています。
(ShareBoardAIR.mxml)264行目~269行目
変換したJPEGデータをデスクトップ上にファイルとして書き出しています。
ログイン・ログアウト
画面から入力されたユーザ名とパスワードを使用して認証をしています。ポップアップウィンドウで結果を判断しなければいけない都合上、ログインに関する処理はウィンドウファイル内で完結しています。なお、ログインはユーザが本人かを判断する認証処理(Authentication)と、認証されたユーザにアクセス権限があるかを判断する権限チェック(Authorization)に2段階に処理が分かれています。
処理概要
- 認証結果を処理するイベントリスナを登録する。
- 画面から入力された情報をサーバへ送信する。
- 認証結果により起こるイベント内で、成功したならメインウィンドウへ処理を戻し、失敗したならエラーメッセージを表示する。
(LoginWindow.mxml)23行目~54行目
認証に成功したときに実行されるイベントリスナと、失敗したときに実行されるイベントリスナを登録し、入力されたユーザ名とパスワードをサーバへ送信しています。
(LoginWindow.mxml)25行目~37行目
認証に成功したときに実行されるイベントリスナです。続いて権限チェックをするイベントリスナと、権限チェックに失敗したときに実行されるイベントリスナを登録し、受信担当メッセージエージェント(Consumer)を購読状態にしています。認証のように明示的にメソッドを呼ぶのではなく、購読状態を開始する課程で権限チェックがされることを利用しています。
(LoginWindow.mxml)38行目~53行目
権限チェックに失敗したときに実行されるイベントリスナです。サーバへのネットワークレベルでの接続ができなかったときと、認証に失敗したときにエラーメッセージを表示しています。
(LoginWindow.mxml)58行目~67行目
購読状態が開始されたことでログイン成功と判断し、ログイン後処理をしています。メインウィンドウから渡された関数を呼び出し、不要になったイベントリスナの登録を解除してログインウィンドウを閉じています。
(LoginWindow.mxml)69行目~80行目
認証には成功したものの権限チェックに失敗したときに、エラーメッセージを表示して認証を解除しています。
メッセージ送受信(サーバ - クライアント)
こちらのみサーバサイドで実行されるJavaプログラムです。クライアントが接続または切断したときに実行される処理を記述しています。
(ShareBoardBootstrapService.java)23行目~26行目
サーバ起動時に呼ばれるメソッドです。クライアントの接続または切断を監視するイベントリスナを登録しています。
(ShareBoardBootstrapService.java)38行目~91行目
イベントリスナのクラスです。接続または切断に応じたメソッドが実行されます。
(ShareBoardBootstrapService.java)42行目~58行目
クライアントが接続したときに実行されるメソッドです。接続したクライアントに線色を割り当てるメッセージを送信する処理と、他のクライアントに新しいクライアントが接続したことを知らせるメッセージを送信する処理をしています。このメソッドが実行されるのはクライアントの接続完了と同時のため、状況によって線色の割り当てメッセージが届かない場合がありました。それを防ぐために、間隔を開けて送信する別スレッドを起動しています。
(ShareBoardBootstrapService.java)93行目~118行目
線色割り当てメッセージを実際に送信しているクラスです。
(ShareBoardBootstrapService.java)63行目~74行目
他のクライアントに、特定のクライアントが切断したことを知らせるメッセージを送信しています。