Я бы сказал, что вам нужно использовать sharedObject.setDirty("usersID");
SharedObject не может знать, что вы изменили содержимое ArrayCollection, поскольку ссылка на него не изменилась.Вы можете использовать setDirty () для принудительной синхронизации.
Примечание: Метод SharedObject.setProperty () реализует метод setDirty ().В большинстве случаев, например, когда значение свойства является типом примитива, таким как String или Number, вы должны использовать setProperty () вместо setDirty.Однако, когда значением свойства является объект, который содержит его собственные свойства, используйте setDirty (), чтобы указать, когда значение в объекте изменилось.В целом, рекомендуется вызывать setProperty (), а не setDirty (), поскольку 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);
}