远程共享对象Fms Flex 4的问题

| 我正在尝试开发一个应用程序,其中多个同时用户可以进行交互,并且我需要一个持久的远程共享对象以及当前会话中的用户列表。 当新用户进入会话时,他将获得带有列表的服务器对象。该列表被认为可以使所有其他用户都参与会话,但未定义。 我先这样做:
users_so = SharedObject.getRemote(\"users_so\", nc.uri, true);
users_so.connect( nc );
users_so.addEventListener( SyncEvent.SYNC, usersSyncHandler );
然后我将属性设置为共享对象
remoteUsers = new ArrayCollection();
    remoteUsers.addItem(displayName);
    users_so.setProperty(\"usersID\", remoteUsers);
最后,我将用户列入列表。 谢谢!     
已邀请:
我会说,您需要使用
sharedObject.setDirty(\"usersID\");
SharedObject不知道您更改了ArrayCollection的内容,因为对它的引用没有更改。您可以使用setDirty()强制同步。   注意:SharedObject.setProperty()   方法实现setDirty()   方法。在大多数情况下,例如   属性的值是原始值   类型,例如字符串或数字,您将   使用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);
}
    
我找到了一种对我更有效的解决方案: 它包括在服务器上调用远程功能,然后广播到所有客户端。然后,客户应用必需的更改,使解决方案更加稳定。     

要回复问题请先登录注册