私は、あなたが使用する必要があると言うでしょうsharedObject.setDirty("usersID");
ArrayCollection への参照が変更されていないため、SharedObject は ArrayCollection の内容を変更したことを認識できません。setDirty() を使用して同期を強制できます。
注: SharedObject.setProperty() メソッドは setDirty() メソッドを実装します。プロパティの値が String や Number などのプリミティブ型の場合など、ほとんどの場合、setDirty の代わりに setProperty() を使用します。ただし、プロパティの値が独自のプロパティを含むオブジェクトである場合は、setDirty() を使用して、オブジェクト内の値がいつ変更されたかを示します。一般に、setDirty() ではなく setProperty() を呼び出すことをお勧めします。これは、setProperty() は値が変更された場合にのみプロパティ値を更新するのに対し、setDirty() はサブスクライブしているすべてのクライアントで同期を強制するためです。
これには単純な動的オブジェクトを使用しています。クライアントには読み取り専用の SharedObject があり、サーバーはこの SharedObject からクライアントを追加/削除するタイミングを決定します。
m_so
はSharedObject
(リモート)、m_userList
はObject
(ローカル)
if(m_so.data.userList != null) {
for (var key:String in m_so.data.userList) {
if(m_userList[key] == null) {
_addUser(m_so.data.userList[key]);
}
}
for(var clientId:String in m_userList) {
if(m_so.data.userList[clientId] == null) {
_removeUser(clientId);
}
}
}
application.onAppStart = function () {
userList = {};
so = SharedObject.get("roster", false);
so.setProperty("userList", userList);
}
application.onConnect = function (client /*Client*/, userId /*string*/) {
application.acceptConnection(client);
client.userId = userId;
userList[userId] = userId;
so.setProperty("userList", userList);
}
application.onDisconnect = function (client /*Client*/) {
var userId = client.userId;
delete userList[userId];
so.setProperty("userList", userList);
}