0

FMSに次のオブジェクトがあります

ユーザー = 関数 (ユーザー名、ユーザー ID)

{

this.userName = ユーザー名;

this.userId = userId;

}

ユーザーのリストをクライアントのswfに送信する必要があります。User オブジェクト コレクションを配列に初期化すると、クライアントから読み取ったときに配列要素が未定義になります。

ただし、汎用オブジェクトも送信できません。次のようにオブジェクトの配列要素を初期化したら。また、クライアント側で未定義を提供します。

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

しかし、次の作品

var arr2 = [];

arr2["userName"] = "user1name"; arr2["userId "] = "user1id";

クライアントは FMS 上のメイン アプリケーションに接続されます。次に、NetConnection を介して 2 番目のアプリケーションに接続します。そして、「registerProxy」機能を使用してリモート メソッドをマップしました。

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

上述の第2の用途における方法。クライアント側に Actionscript 2 を使用しています。

この問題の解決策は高く評価されています。

前もって感謝します。

4

2 に答える 2

1

私の知る限り、クライアント側のクラスをサーバー側のFMSクラスにマップする方法はありません。AS2では、私が昔を覚えている限り、この機能は単に存在していませんでした。

AS3であなたの例を試しました。オブジェクトの受け渡し(型指定はされていませんが)はFMS3.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に移植することを検討してください。

于 2010-01-03T12:46:40.453 に答える