0

FMS では、Shared オブジェクトを使用してチャット アプリケーションでメッセージを送信したいと考えています。これはリアルタイムであるためです。私の質問は...共有オブジェクトを使用して、ライブ チャット アプリケーションでユーザーにメッセージをやり取りするにはどうすればよいですか? これには、サーバー側のスクリプト、クライアント、またはその両方が必要ですか?

4

1 に答える 1

2

セキュリティ機能などの特定の機能のために、サーバー側でいくつかのコードを記述するだけで済みます (たとえば、すべてのユーザーがメッセージを送信できるわけではない場合)。

クライアント側では、次のことを行う必要があります。

  • サーバーに接続します。
  • サーバーから共有オブジェクトを取得します。要求したときに存在しない場合は、作成されます。
  • のリスナーを追加しSyncEventます。

そこから、クライアントがメソッドを使用して sharedObject のプロパティを追加、更新、または削除するたびにsetProperty()、接続されているすべてのクライアントがSyncEvent.

package
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;
    import flash.events.NetStatusEvent;
    import flash.events.SyncEvent;
    import flash.net.NetConnection;
    import flash.net.SharedObject;

    public class Chat extends EventDispatcher
    {
        public var messages:Array;
        private var connection:NetConnection;
        private var chat_so:SharedObject;

        public function Chat()
        {
            super();
            connection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
            messages = [];
        }

        public function connect(uri:String):void
        {
            connection.connect(uri);
        }

        public function addMessage(value:String):void
        {
            chat_so.setProperty(messages.length.toString(), value);
        }

        private function setUpSharedObject():void
        {
            chat_so = SharedObject.getRemote("chat", connection.uri);
            chat_so.addEventListener(SyncEvent.SYNC, onSync);
            chat_so.client = this;
        }

        private function onNetStatus(event:NetStatusEvent):void
        {
            if (event.info.code == "NetConnection.Connect.Success")
            {
                setUpSharedObject();
            }
            else
            {
                trace(event.info.code + ": " + event.info.description);
            }
        }

        private function onSync(event:SyncEvent):void
        {
            for (var i:int = 0; i < event.changeList.length; i++)
            {
                var code:String = event.changeList[i].code;

                switch(code)
                {
                    case "change":
                    case "success":
                    {
                        messages.push();
                        dispatchEvent(new Event(Event.CHANGE));
                        break;
                    }
                    case "clear":
                    {
                        messages = [];
                        break;
                    }
                    case "delete":
                    default:
                    {
                        break;
                    }
                }
            }
        }
    }
}
于 2013-03-28T08:04:19.880 に答える