无法接收Netgroup事件

时间:2012-05-21 10:30:59

标签: actionscript-3 flash-media-server

我使用FMS(rtmfp)连接到Netgroup。我可以连接到Netgroup(reiceve NetStatusEvent“NetGroup.Connect.Success”),但这就是全部。我无法发布任何内容或看到有人加入了Netgroup,没有NetStatusEvent触发。我错过了什么吗?

以下是代码:

public function connect(url:String):void {                  
    _nc = new NetConnection();
    _nc.client = this;
    _nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

    _nc.connect(url);   
}

private function netStatusHandler(event:NetStatusEvent):void {
    switch (event.info.code){
        case "NetConnection.Connect.Success":               
            createGroup();
            break;              
        case "NetGroup.Connect.Success":                    
            //post msg to the group
            var message:Object = new Object;                    
            message.text = "Hello";                 
            message.sender = _nc.nearID;                    
            _netGroup.post(message);
            break;
        default:                    
            trace("event.info.code: " + event.info.code);           
            break;
    }               
}

private function createGroup():void {
    _groupSpecifier = new GroupSpecifier("test_group"); 
    _groupSpecifier.postingEnabled = true; 
    _groupSpecifier.multicastEnabled = true;            
    _groupSpecifier.serverChannelEnabled = true; 

    _netGroup = new NetGroup(_nc, _groupSpecifier.groupspecWithAuthorizations()); 
    _netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);        
}   

3 个答案:

答案 0 :(得分:1)

您需要在交换机块中检查“NetGroup.Posting.Notify”,并使用NetGroup类的post方法!

private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code){
    case "NetConnection.Connect.Success":               
        createGroup();
        break;              
    case "NetGroup.Connect.Success":                    
        break;
    case "NetGroup.Posting.Notify" :
        receiveMessage(event.info.message);
        break;

    default:                    
        trace("event.info.code: " + event.info.code);           
        break;
}               

}

然后在receiveMessage函数中:

private function receiveMessage(message:Object):void
    {   
        trace(message.text)
    }

最后发送功能:

private function sendMessage(txt:String):void
    {
        var message:Object = new Object();
        message.text = txt;

        netGroup.post(message);
    }

现在您可以在按下发送按钮时调用sendMessage(“text”)。

答案 1 :(得分:1)

您选择发布邮件的位置可能会出现问题。发布来自Connect.sucess,因此邻居未连接到对等方。只有在邻居连接后,该消息才会发布到其他对等体。

答案 2 :(得分:0)

为了完成你要求的任务,你应该在听到“NetGroup.Neighbor.Connect”时触发帖子()。如果在连接到组时立即触发post(),则在连接到邻居之前可能会触发它。将您连接到组和组邻居不会同时发生。 P2P连接依赖于邻居可用的确认,以便消息可以在整个组中传播。

要接收post()消息,您需要侦听“NetGroup.Posting.Notify”。您创建的消息是一个简单称为消息的对象,其中附有两条信息。此时,您可以使用消息并将其打印到文本字段。

我根据你写的内容发布了一些示例代码(不会开箱即用)。您可以看到我们正在等待,直到我们可以在发布post()之前确认与组内邻居的连接。

private function netStatusHandler(event:NetStatusEvent):void {
    switch (event.info.code){
        case "NetConnection.Connect.Success":               
            createGroup();
            break;              
        case "NetGroup.Connect.Success":                    
            connected = true;
               break;

        case "NetGroup.Neighbor.Connect":
            //post msg to the group
               var message:Object = new Object;                    
               message.text = "Hello";                 
               message.sender = _nc.nearID;                    
               _netGroup.post(message);

        case "NetGroup.Posting.Notify":
            writeText(message.sender + ": " message.text);
        default:                    
               trace("event.info.code: " + event.info.code);           
               break;
    }               
}

这些课程可以为你做很多事情,所以继续坚持下去。您不仅限于短信,还可以传递任何对象。可以处理流数据,但是有特定的类。

我引用的链接,将进一步帮助您:

GroupSpecifier

NetStatusEvent