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