如何将类型化对象从FMS发送到客户端

时间:2010-01-02 11:49:27

标签: flex flash media flash-media-server

我在FMS中有以下对象

User = function(userName,userId)

{

this.userName = userName;

this.userId = userId;

}

我需要将用户列表发送到客户端swf。一旦我将User对象集合初始化为数组,当我从客户端读取它时,数​​组元素是未定义的。

但是我也不能发送通用对象。一旦我初始化对象中的数组元素如下。它还在客户端提供了undefined。

var myObj = {userName:“user1name”,userId:“user1id”};

但是以下作品

var arr2 = [];

arr2 [“userName”] =“user1name”; arr2 [“userId”] =“user1id”;

客户端连接到FMS上的主应用程序。然后它通过NetConnection连接到第二个应用程序。我已经使用'registerProxy'功能映射了远程方法。

例如:application.registerProxy(localName,this._nc,remoteName);

上述第二种申请中的方法。我在客户端使用Actionscript 2。

对此事的任何解决方案都表示高度赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法将客户端类映射到服务器端FMS类。在AS2中,就我记忆中的旧时代而言,这个功能根本就没有了。

我尝试过AS3的例子。传递对象(虽然无类型)适用于FMS 3.5。

客户端:

private var nc:NetConnection;
private function init():void  {
    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    nc.connect("rtmp:/test");
}
private function netStatusHandler(event:NetStatusEvent):void {
    trace(event.info.code);
    if(event.info.code == "NetConnection.Connect.Success") {
        var responder:Responder = new Responder(resultHandler);
        nc.call("getUser", responder, "hrundik", 1234);
    }
}
private function resultHandler(result:Object):void {
    if(result)
        trace(result.userName, result.userId);
}

服务器端:

User = function(userName,userId) {
    this.userName = userName;
    this.userId = userId;
}
application.onConnect = function (client) {
    trace("client connected!");
    client.getUser = function(userName, userId) {
        return new User(userName, userId);
    }
    return true;
}

AS2和AS3之间差异的原因可能在于使用了对象编码协议 - AMF0与AMF3。虽然,AMF0在AS3中按预期工作。

或许,考虑将您的应用程序移植到AS3。

答案 1 :(得分:0)

谢谢,但是你给了我很好的提示:)在FMS服务器上的应用程序间NetConnection中出现问题。默认情况下,FMS 3使用AMF3序列化。从我的客户端应用程序AS2开始,我在FMS上更改了ObjectEncoding Application.xml

例如。 <ObjectEncoding>AMF0</ObjectEncoding>