0

複合型オブジェクト(FlexではRemoteClassとマークされている)をNetConnection経由で他のクライアントに送信する必要があります。

[RemoteClass]
public class ComplexType
{
    public var _someString:String;
    public var _someInt:int;
}

...そして使用する..。

_nc = new NetConnection();
_nc.connect("rtmp://localhost/echo/");
_nc.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);              
_nc.client = {};
_nc.client.echoCallback = _echoCallback;

var dto:ComplexType = new ComplexType();
dto._someInt = 4;
dto._someString = "abrakadabra";                    
_nc.call("echo", null, dto);

ただし、サーバー側のコールバック関数は強く型付けされたオブジェクトを理解せず、次のように返送するようです。

private function _echoCallback(...args):void
{
    trace(ObjectUtil.toString(args));
    /*

    (Array)#0
      [0] (Object)#1
         _someInt = 4
         _someString = "abrakadabra"

    */
}

サーバー側は次のようになります。

application.onAppStart = function () {
    trace("Application.onAppStart > application started");

    Client.prototype.echo = function (complexType /*ComplexType*/) {
        trace("Client.echo > calling echo");        
        application.broadcastMsg("echoCallback", complexType);
    }
}

NetConnectionを介して強く型付けされたオブジェクトを中継する方法はありますか?

EDIT1:ObjectUtil.toString()出力を含むコールバック関数のソースコードを追加しました

4

2 に答える 2

1

送信用:

var ba:ByteArray = new ByteArray();
ba.writeObject(dto);

_nc.call("echo", null, ba);

そして受け取るために:

private function _echoCallback(ba:ByteArray):void
{
    var dto:ComplexType = ba.readObject() as ComplexType;

    trace(ObjectUtil.toString(dto));

    /*
    (ComplexType)#0
      _someInt = 4
      _someString = "abrakadabra"
    */
}

それはすごい!!!!

于 2011-02-23T00:12:27.120 に答える
1

アノテーションにaliasプロパティを追加する必要があります。[RemoteClass]

[RemoteClass(alias="my.unique.Class")]

これにより、匿名オブジェクトがAMFの型付きオブジェクトに変更されます。

于 2011-02-23T00:18:50.123 に答える