package jp.sourceforge.larch.example.chat
{
    import jp.sourceforge.larch.fms.so.AbstractSharedObject;

    import mx.collections.ArrayCollection;
    import mx.controls.Alert;

    /**
     * チャット用の共有オブジェクト
     * @author tdott<tdott@users.sourceforge.jp>
     */
    public class ChatSO extends AbstractSharedObject
    {
        /**
         * 共有オブジェクトを初期化します。
         */
        override protected function initProperties():void
        {
            _memberList = new ArrayCollection();
            _messageHistory = "";
            sync();
        }

        /** @private */
        private var _memberList:ArrayCollection;
        /** ログインメンバーリスト */
        [Bindable]
        public function get memberList():ArrayCollection
        {
            return _memberList;
        }
        /** @private */
        public function set memberList(value:ArrayCollection):void
        {
            if(_memberList != value)
            {
                _memberList = value;
                sync();
            }
        }

        /** @private */
        private var _messageHistory:String;
        /** 発言履歴 */
        [Bindable]
        public function get messageHistory():String
        {
            return _messageHistory;
        }
        /** @private */
        public function set messageHistory(value:String):void
        {
            if(_messageHistory != value)
            {
                _messageHistory = value;
                sync();
            }
        }

        /**
         * すべてのクライアントのalertメソッドを呼び出します。
         * @param publisher 通知者
         * @param message メッセージ
         */
        public function callAlert(publisher:String, message:String):void
        {
            call("alert", publisher, message);
        }

        /**
         * アラートを表示します。
         * @param publisher 通知者
         * @param message メッセージ
         */
        public function alert(publisher:String, message:String):void
        {
            Alert.show(message, publisher + "さんからの通知です");
        }
    }
}