<?xml version="1.0" encoding="utf-8"?>
<!--
    チャットサンプル
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                layout="absolute"
                creationComplete="onCreationComplete()" viewSourceURL="srcview/index.html">
  <mx:Script>
    <![CDATA[
          import jp.sourceforge.larch.core.util.LarchCollectionUtil;
          import jp.sourceforge.larch.example.chat.ChatSO;
          import jp.sourceforge.larch.fms.SingletonNetConnectionFactory;
          import mx.controls.Alert;
          import mx.events.CollectionEvent;

          /** 共有オブジェクト */
          [Bindable]
          private var so:ChatSO;

          /** メンバーリスト */
          [Bindable]
          private var memberList:String;

          /**
           * creationCompleteイベントハンドラ
           */
          private function onCreationComplete():void
          {
              // 接続を初期化
              SingletonNetConnectionFactory.initConnection("larchChatExample", onNCInit);
          }

          /** 接続の初期化イベントのイベントハンドラ */
          private function onNCInit():void
          {
              // 共有オブジェクトを取得
              so = SingletonNetConnectionFactory.connection.getSharedObject(ChatSO) as ChatSO;
              // メンバーリストの変更イベントハンドラを設定
              so.memberList.addEventListener(CollectionEvent.COLLECTION_CHANGE, onMemberListChange);
          }

          /** メンバーリストの変更イベントハンドラ */
          private function onMemberListChange(event:CollectionEvent):void
          {
              // メンバーリスト文字列を更新
              memberList = so.memberList.toString();
          }

          /** ログインボタンのイベントハンドラ */
          private function onLoginButtonClick():void
          {
              if(loginName.text.length == 0)
                  Alert.show("ログイン名を入力してください。");
              else
              {
                  // メンバーリストに追加
                  so.memberList.addItem(loginName.text);
                  // 画面切り替え
                  viewStack.selectedIndex = 1;
              }
          }

          /** 送信ボタンのイベントハンドラ */
          private function onSendButtonClick():void
          {
              if(messageText.text.length == 0)
                  Alert.show("発言を入力してください。");
              else
              {
                  // 発言履歴に発言を追加
                  so.messageHistory += loginName.text + ":" + messageText.text + "\n";
              }
          }

          /** 通知ボタンのイベントハンドラ */
          private function onAlertButtonClick():void
          {
              if(messageText.text.length == 0)
                  Alert.show("発言を入力してください。");
              else
              {
                  // alertメソッドの呼び出しを要求
                  so.callAlert(loginName.text, messageText.text);
              }
          }

          /** ログアウトボタンのイベントハンドラ */
          private function onLogoutButtonClick():void
          {
              // メンバーリストから削除
              LarchCollectionUtil.removeItem(so.memberList, loginName.text);
              // 画面切り替え
              viewStack.selectedIndex = 0;
          }
    ]]>
  </mx:Script>

  <mx:ViewStack id="viewStack" width="100%" height="100%">

    <!-- ログイン画面 -->
    <mx:Form width="100%" height="100%">
      <mx:FormItem label="ログイン名">
        <mx:TextInput id="loginName"/>
      </mx:FormItem>
      <mx:FormItem>
        <mx:Button label="ログイン" click="onLoginButtonClick()"/>
      </mx:FormItem>
    </mx:Form>

    <!-- チャット画面 -->
    <mx:Form width="100%" height="100%">
      <mx:FormItem label="ログインメンバー">
        <mx:Text text="{memberList}"/>
      </mx:FormItem>
      <mx:FormItem label="発言履歴">
        <mx:TextArea text="{so.messageHistory}" editable="false"/>
      </mx:FormItem>
      <mx:FormItem label="発言" direction="horizontal">
        <mx:TextInput id="messageText"/>
        <mx:Button label="送信" click="onSendButtonClick()"/>
        <mx:Button label="通知" click="onAlertButtonClick()"/>
      </mx:FormItem>
      <mx:Button label="ログアウト" click="onLogoutButtonClick()"/>
    </mx:Form>

  </mx:ViewStack>

</mx:Application>