Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 远程共享对象Fms Flex 4的问题_Apache Flex_Adobe_Flash Media Server_Shared Objects - Fatal编程技术网

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

Apache flex 远程共享对象Fms Flex 4的问题,apache-flex,adobe,flash-media-server,shared-objects,Apache Flex,Adobe,Flash Media Server,Shared Objects,我正在尝试开发一个应用程序,在这个应用程序中,同时的用户可以交互,并且我需要一个持久的远程共享对象,其中包含当前会话中的用户列表。 当一个新用户进入会话时,他用列表获取服务器的对象。该列表允许所有其他用户参与会话,但未定义 我首先要做的是: users_so = SharedObject.getRemote("users_so", nc.uri, true); users_so.connect( nc ); users_so.addEventListener( SyncEvent.SYNC, u

我正在尝试开发一个应用程序,在这个应用程序中,同时的用户可以交互,并且我需要一个持久的远程共享对象,其中包含当前会话中的用户列表。 当一个新用户进入会话时,他用列表获取服务器的对象。该列表允许所有其他用户参与会话,但未定义

我首先要做的是:

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
对象
(本地)


我找到了一个更适合我的解决方案:

它包括在服务器上调用远程函数,然后广播到所有客户端。然后,客户应用必要的更改,使解决方案更加稳定

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);
}