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