在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对象的客户端对象上的回调函数),两种函数声明方式之间究竟有什么区别?是一种方式有效的原因,而另一种方式不是这种情况吗?
答案 0 :(得分: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的回调。
第二,你还没有那样做。