0

在 AS3 中处理 P2P 客户端时,我偶然发现了一些我想完全理解的东西。

虽然这有效:

private function test():void
{
    _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
    var c:Object = new Object;
    c.onPeerConnect = function(subscriber:NetStream):Boolean 
    {
        trace("onPeerConnect");
        return true;
    }
    _sendStream.client = c;
    ...
}

这不起作用:

private function test():void
{
    _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
    _sendStream.client = this;
    ...
}

public function onPeerConnect(subscriber:NetStream):Boolean 
{
    trace("onPeerConnect");
    return true;
}

在不深入手头特定问题的细节的情况下(onPeerConnect 只是在某个时刻在 NetStream 对象的客户端对象上调用的回调函数),这两种函数声明方式之间到底有什么区别,可能是什么原因一种方法有效,而另一种方法在这种情况下无效?

4

1 回答 1

1

好的,我相信我找到了问题所在。这似乎指定了问题:

NetStream.client 对象可以调用以下函数并接收关联的数据对象:onCuePoint()、onImageData()、onMetaData()、onPlayStatus()、onSeekPoint()、onTextData() 和 onXMPData()。

因此,您需要为您的 onPeerConnect 函数显式设置回调,我认为评论中的@Vesper 可能在正确的轨道上,这应该可以工作:

class CustomClient
{
    public var _sendStream:NetStream;

    public function CustomClient()
    {    
         _sendStream = new NetStream(_nc, NetStream.DIRECT_CONNECTIONS);
         _sendStream.client = this;
         _sendStream.onPeerConnect = this.onPeerConnect;
    }

     public function onPeerConnect(subscriber:NetStream):Boolean 
    {
        trace("onPeerConnect");
        return true;
    }
}

您的第一个代码块有效,因为您正在为 onPeerConnect 显式设置回调。

第二,你还没有这样做。

于 2013-09-18T23:22:05.283 回答